Python诅咒update_panels()和Panel.move()问题

问题描述 投票:0回答:1

我正在尝试学习如何使用Python Curses(并希望构建一个简单的游戏),但是以某种方式我无法使curses面板正常工作。

特别是,当我尝试进行update_panels()时,我的脚本(下面)立即直接退出并返回到提示。

import curses, curses.panel, time as t

def main(stdscr):
    # Initialize some colors and styles
    curses.start_color()
    curses.init_pair( 1, curses.COLOR_RED, curses.COLOR_BLACK )
    pl_style = curses.color_pair( 1 ) + curses.A_BOLD + curses.A_REVERSE

    # Create a Background window and panel
    bg_W = curses.newwin( 10, 100, 5, 5 )
    bg_W.box(); 
    bg_W.addstr( 1, 2, "BG Window" )
    bg_P = curses.panel.new_panel( bg_W )
    bg_W.refresh(); t.sleep( 2 )

    # Create a Player window and panel
    pl_W = curses.newwin( 1, 1, 10, 20 )
    pl_W.insch( '+', pl_style )
    pl_P = curses.panel.new_panel( pl_W )
    pl_W.refresh(); t.sleep( 2 )

    # Update panels
    curses.panel.update_panels()
    curses.doupdate()

    # # Move the Player panel and update panels
    # pl_P.move( 10, 30 )
    # curses.panel.update_panels()
    # curses.doupdate()
    # t.sleep( 2 )

    while True: 
        if pl_W.getch() == 27: break

if __name__ == "__main__": 
    curses.wrapper( main )

或者,当我尝试仅移动面板时,我的脚本(如下)将返回错误。

import curses, curses.panel, time as t

def main(stdscr):
    # Initialize some colors and styles
    curses.start_color()
    curses.init_pair( 1, curses.COLOR_RED, curses.COLOR_BLACK )
    pl_style = curses.color_pair( 1 ) + curses.A_BOLD + curses.A_REVERSE

    # Create a Background window and panel
    bg_W = curses.newwin( 10, 100, 5, 5 )
    bg_W.box(); 
    bg_W.addstr( 1, 2, "BG Window" )
    bg_P = curses.panel.new_panel( bg_W )
    bg_W.refresh(); t.sleep( 2 )

    # Create a Player window and panel
    pl_W = curses.newwin( 1, 1, 10, 20 )
    pl_W.insch( '+', pl_style )
    pl_P = curses.panel.new_panel( pl_W )
    pl_W.refresh(); t.sleep( 2 )

    # # Update panels
    # curses.panel.update_panels()
    # curses.doupdate()

    # Move the Player panel and update panels
    pl_P.move( 10, 30 )
    curses.panel.update_panels()
    curses.doupdate()
    t.sleep( 2 )

    while True: 
        if pl_W.getch() == 27: break

if __name__ == "__main__": 
    curses.wrapper( main )

我得到的错误如下:

Traceback (most recent call last):
  File "panl2.py", line 36, in <module>
    curses.wrapper( main )
  File "C:\Program Files\Python38\lib\curses\__init__.py", line 105, in wrapper
    return func(stdscr, *args, **kwds)
  File "panl2.py", line 27, in main
    pl_P.move( 10, 30 )
_curses_panel.error: move_panel() returned ERR

我曾经想弄清楚什么地方出了问题,但是一无所获,非常感谢任何指导。

我正在x64 Windows 10 Pro(v10.0.18362)计算机上的标准Windows命令提示符(v10.0.18362.449)中将Windows curses(v2.1.0)与Python 3.8(v3.8.1:1b293b6)配合使用。

python panel ncurses curses
1个回答
0
投票

ncurses的move_panel函数从mvwin返回结果,其记录如下:

调用mvwin移动窗口,使得左上角位于位置(x,y)。如果此举会导致窗口关闭,屏幕,这是一个错误,并且窗口未移动。移动子窗口允许,但应避免。

在python中,您必须使用try / except块来避免在ncurses返回错误时简单地退出。

使用“ windows-curses”,底层库可能是PDCurses(除了源代码中的注释之外,没有其他文档)。但是,其面板支持最终来自相同的(mvwin)实现。您可以在Warren Tucker中看到错误返回。

© www.soinside.com 2019 - 2024. All rights reserved.