代码之家  ›  专栏  ›  技术社区  ›  Anonymous

诅咒面板的奇怪行为

  •  1
  • Anonymous  · 技术社区  · 10 年前

    我目前正在编写一个基于文本的小游戏,主要目的是学习如何在python中使用诅咒。然而,我遇到了curses.panel模块的问题。当从不重叠的窗口创建两个面板时,每个面板的hide()和show()函数独立工作,但组合在一起时会间歇性工作。

    例如,我在下面列出了一个最低工作(或者更确切地说,不工作)的示例。要再现,请按1显示窗口1,按2显示窗口2,然后再次按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 回复  |  直到 10 年前
        1
  •  1
  •   Anonymous    10 年前

    发现问题!对任何有这个问题的人来说:我只是想说

    curses.panel.update_panels()
    

    在两个if-else块之后,即改变面板可见性的代码块。