如何使文本适合python curses文本框内?
问题描述:
我尝试了很多事情,试图让文本留在它的边界内,但我找不到方法。以下是我已经尝试过的。如何使文本适合python curses文本框内?
#!/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()
答
你的第一个问题是,调用box1.box()
你的盒子占用空间。它用尽了第一行,第一行,第一列和最后一列。当您使用box1.addstr()
将一个字符串放入一个框中时,它会从第0列开始,并覆盖该框字符。创建边框后,您的盒子每行只有38个可用字符。
我不是一个诅咒专家,但是解决这个的一种方式是创建内部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()
我的输出是这样的:
答
的盒是窗口的一部分,并使用相同的房地产为文本。在第一个窗口上绘制一个框后,您可以创建第一个窗口的子窗口。然后在子窗口中编写包装文本。
喜欢的东西
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
描述。
需要注意的是托马斯·迪基和我已经基本张贴了同样的答案,虽然他使用'.derwin'创建一个子窗口,这可能是更好的方法。我有图片。抛硬币 :) – larsks