我尝试过很多东西试图让文字留在它的边界内,但我找不到办法。以下是我已经尝试过的内容。
#!/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()
答案 0 :(得分:3)
框是窗口的一部分,并使用与文本相同的不动产。在第一个窗口上绘制一个框后,可以创建第一个窗口的子窗口。然后在子窗口中编写包装文本。
像
这样的东西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
说明。
答案 1 :(得分:1)
您的第一个问题是,在您的框中调用box1.box()
会占用空间。它用尽了顶行,底行,第一列和最后一列。当您使用box1.addstr()
将字符串放入框中时,它从col 0,row 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()
我的输出如下: