2017-08-13 6 views
0

私はテキストをその枠の内側にとどめようと多くのことを試みましたが、私は道を見つけることができません。以下は私がすでに試したことです。Pythonの内部でテキストを収縮させるにはどうすればよいですか?

#!/usr/bin/env python 

import curses 
import textwrap 

screen = curses.initscr() 
screen.immedok(True) 

try: 
    screen.border(0) 

    box1 = curses.newwin(20, 40, 6, 50) 
    box1.immedok(True) 
    text = "I want all of this text to stay inside its box. Why does it keep going outside its borders?" 
    box1.box() 
    box1.addstr(1, 0, textwrap.fill(text, 39)) 

    #box1.addstr("Hello World of Curses!") 

    screen.getch() 

finally: 
    curses.endwin() 

答えて

1

あなたの最初の問題は、box1.box()があなたのボックスにスペースを呼び出すことです。一番上の行、一番下の行、一番目の列、そして最後の列を使います。 box1.addstr()を使用して文字列をボックスに入れると、列0、行0から開始され、ボックス文字を上書きします。ボーダーを作成した後は、1行に38文字しか使用できません。

私は呪いの専門家ではないんだけど、これを解決する一つの方法は、すべての方法の周りに1つの文字によってはめ込まれbox1内に新しいボックスを作成することです。それは次のとおりです。

box2 = curses.newwin(18,38,7,51) 

次にあなたがbox1で文字を描くボックスを上書きすることなく、そのボックスにテキストを書き込むことができます。 textwrap.fillに電話する必要もありません。 addstrという文字列をウィンドウに書き込むと、自動的にテキストがラップされるように見えます。実際には、textwrap.fillを呼び出すことは、ウィンドウとうまくやりとりすることができます。テキストの折り返しによってウィンドウの幅が正確に分割された場合、出力に間違った空白行が表示されることがあります。

を考えると、次のコード:

try: 
    screen.border(0) 

    box1 = curses.newwin(20, 40, 6, 50) 
    box2 = curses.newwin(18,38,7,51) 
    box1.immedok(True) 
    box2.immedok(True) 
    text = "I want all of this text to stay inside its box. Why does it keep going outside its borders?" 
    text = "The quick brown fox jumped over the lazy dog." 
    text = "A long time ago, in a galaxy far, far away, there lived a young man named Luke Skywalker." 
    box1.box() 
    box2.addstr(1, 0, textwrap.fill(text, 38)) 

    #box1.addstr("Hello World of Curses!") 

    screen.getch() 

finally: 
    curses.endwin() 

私の出力は次のようになります。トーマス・ディッキーと、私は彼の用途 `ものの、基本的に同じ答えを掲載している

enter image description here

+0

注.derwin'サブウィンドウを作成して、おそらくそれを実行するより良い方法です。私の写真があります。コインを反転:) – larsks

2

ボックスウィンドウの一部であり、テキストとして同じ不動産を使用しています。最初のウィンドウにボックスを描画した後、最初のウィンドウのサブウィンドウを作成することができます。次に、ラップされたテキストをサブウィンドウに書き込みます。

box1 = curses.newwin(20, 40, 6, 50) 
box1.immedok(True) 
text = "I want all of this text to stay inside its box. Why does it keep going outside its borders?" 
box1.box() 
box1.refresh() 
# derwin is relative to the parent window: 
box2 = box1.derwin(18, 38, 1,1) 
box2.addstr(1, 0, textwrap.fill(text, 39)) 

よう

何かが参照でderwinの説明を参照してください。

関連する問題