诅咒面板的奇怪行为

匿名的

我目前正在写一个小型的基于文本的游戏,主要目的是学习如何在python中使用Curses。但是,我遇到了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)
匿名的

发现了问题!对于其他遇到此问题的人:我只需要打线

curses.panel.update_panels()

在两个if-else块之后-即更改面板可视性的代码块。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章