Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python诅咒update_panels()和Panel.move()问题_Python_Panel_Ncurses_Curses - Fatal编程技术网

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

Python诅咒update_panels()和Panel.move()问题,python,panel,ncurses,curses,Python,Panel,Ncurses,Curses,我试图学习如何使用Python诅咒(并希望构建一个简单的游戏),但不知何故,我无法让诅咒面板工作 具体地说,当我尝试更新_panels()时,我的脚本(下面)立即退出并直接返回提示符 import curses, curses.panel, time as t def main(stdscr): # Initialize some colors and styles curses.start_color() curses.init_pair( 1, curses.COL

我试图学习如何使用Python诅咒(并希望构建一个简单的游戏),但不知何故,我无法让诅咒面板工作

具体地说,当我尝试更新_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
回溯(最近一次呼叫最后一次):
文件“panl2.py”,第36行,在
curses.wrapper(主)
文件“C:\Program Files\Python38\lib\curses\\uuuuu init\uuuuu.py”,第105行,在包装器中
返回函数(stdscr,*args,**kwds)
文件“panl2.py”,第27行,在main中
pl_P.移动(10,30)
_curses\u panel.error:move\u panel()返回错误
我花了很长时间试图找出问题的症结所在,但我一事无成,如果能得到任何指导,我将不胜感激


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

ncurses'
move_panel
函数返回的结果,其文档记录如下:

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
调用mvwin将移动窗口,使左上角位于 位置(x,y)。如果移动会导致车窗关闭 屏幕,这是一个错误,窗口未移动。移动子窗口 是允许的,但应该避免

在python中,必须使用try/except块,以避免在ncurses返回错误时直接退出

使用“windows诅咒”,底层库可能是PDCurses(除了源代码中的注释外,它没有文档)。然而,它的面板支持最终来自同一个()实现。您可以在中看到错误返回

值得一提的是,在供应商Unix机器(如Solaris)中可能遇到的原始面板库(作者不详)也做了同样的事情(请参见Illumos gate),但在Tucker开发克隆时提供的文档可能没有用处(请参见)