1

私は現在、主にPython内でCursesを使用する方法を学習する目的で、小さなテキストベースのゲームを書いています。しかし、curses.panel モジュールで問題が発生しました。重なっていないウィンドウから 2 つのパネルを作成する場合、各パネルの 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)
4

1 に答える 1

1

問題を発見!この問題を抱えている他の人へ:私はただ行を入れなければなりませんでした

curses.panel.update_panels()

2 つの if-else ブロックの後、つまり、パネルの可視性を変更したコードのブロックです。

于 2014-03-29T21:58:12.563 に答える