2014-03-29 45 views
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) 

回答

0

發現問題了!對任何人誰是有這個問題:我剛放線

curses.panel.update_panels() 

兩個的if-else塊之後 - 即它改變了面板的可見性的代碼塊。