Curses面板的奇怪行为
我现在正在写一个简单的文字游戏,主要是为了学习如何在Python中使用Curses库。不过,我遇到了一个关于curses.panel模块的问题。当我创建两个不重叠的面板时,每个面板的hide()和show()函数可以独立工作,但当一起使用时,它们的表现就不太稳定了。
举个例子,我下面提供了一个最小的示例(其实是个不太好用的示例)。要重现这个问题,先按1来显示第一个窗口,再按2来显示第二个窗口,然后再按2来隐藏第二个窗口。结果是两个窗口都被隐藏了,之后再按2的话,两个窗口会同时显示和隐藏。这是在Python 3.3版本下测试的。
import curses
import curses.panel
def main(stdscr):
# Setup screen object
curses.cbreak() # No need for [Return]
curses.noecho() # Stop keys being printed
curses.curs_set(0) # Invisible cursor
stdscr.keypad(True)
stdscr.clear()
# format: (lines, cols, y, x)
window_one = curses.newwin(10, 20, 1, 1)
window_two = curses.newwin(5, 20, 5, 40)
# Make windows clearly visible
window_one.addstr(2, 2, "Window One")
window_one.border(0)
window_two.addstr(2, 2, "Window Two")
window_two.border(0)
# Create panels
panel_one = curses.panel.new_panel(window_one)
panel_two = curses.panel.new_panel(window_two)
# Both hidden by default
display_one = False
display_two = False
while True:
if display_one:
window_one.refresh()
panel_one.show()
else:
panel_one.hide()
if display_two:
window_two.refresh()
panel_two.show()
else:
panel_two.hide()
stdscr.refresh()
key = stdscr.getkey()
if key == '1':
display_one = not display_one
elif key == '2':
display_two = not display_two
elif key == 'q':
return
if __name__ == "__main__":
curses.wrapper(main)
1 个回答
1
找到了问题所在!如果你也遇到这个问题的话:我只需要在两个if-else代码块之后加上这一行
curses.panel.update_panels()
也就是那些用来改变面板显示与否的代码块。