我正在使用Python创建curses终端GUI,但是首先启动脚本并停止脚本,终端输出完全损坏。在上一行的长度之后打印每行新内容。
例如:
self.player_screen() │
│ File "main.py", line 76, in player_screen │
│ for player_state in player: │
│ File "/home/jerome/PycharmProjects/project/main.py", line 40, in current_play │
│ sleep(1) │
│ KeyboardInterrupt
我不知道为什么终端输出损坏以及如何解决此问题。我使用Python curses包,就像文档说的那样:
def login_screen(self):
login_title = "Please login using your username/id:\n"
login_screen = newwin(0, 0)
login_screen.box()
v_dim, h_dim = login_screen.getmaxyx()
login_screen.addstr(round(v_dim / 2), round((h_dim - len(login_title)) / 2), login_title)
username_input = login_screen.subwin(1, 44, round(v_dim / 2 + 1), round((h_dim - 44) / 2))
username_text_input = textpad.Textbox(username_input)
username_input.refresh()
login_screen.addstr(v_dim - 1, h_dim - 20, "[Enter]Submit")
login_screen.refresh()
username = username_text_input.edit()
endwin()
我没有在我的代码中发现任何错误,也没有什么对我的文档有所帮助。
有人已经解决了这个问题吗?
您的程序似乎正在引发异常。
将您的curses代码包装在try/catch
中,可以退出。例如:
try:
[your curses code here]
except:
curses.nocbreak()
stdscr.keypad(0)
curses.echo()
curses.endwin()
raise
最后一个raise
应该照常在控制台中打印异常。
我编写了一个实用程序模块,它为我执行此操作,它是there。
考虑使用curses wrapper()
包装代码。
来自文档:
调试curses应用程序时的一个常见问题是,当应用程序死机时,您的终端会混乱,而没有将终端恢复到以前的状态。在Python中,这种情况通常发生在您的代码有错误并引发未捕获的异常时。例如,当您键入按键时,它们不再在屏幕上回显,这使得使用外壳变得很困难。
在Python中,您可以通过导入
curses.wrapper()
函数并像这样使用它来避免这些复杂性并使调试变得更加容易:
from curses import wrapper
def main(stdscr):
# Clear screen
stdscr.clear()
#Insert your code here
wrapper(main)