0
我目前正在編寫一個小型的基於文本的遊戲,主要用於學習如何在Python中使用Curses。但是,我遇到了curses.panel模塊的問題。當從不重疊的窗口創建兩個面板時,每個面板的hide()和show()函數將獨立工作,但當組合在一起時會間歇性地工作。Curses面板的奇怪行爲
舉一個例子,我在下面包括了一個最小工作(或者說,不工作)的例子。要重現,請按1顯示第一個窗口,按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)