我正在尝试学习如何使用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)一起使用
答案 0 :(得分:0)
ncurses的move_panel
函数从mvwin
返回结果,其结果记录如下:
调用
mvwin
可以移动窗口,使左上角位于 位置(x,y)。如果此举会导致窗口关闭, 屏幕,这是一个错误,窗口没有移动。移动子窗口 是允许的,但应该避免。
在python中,您必须使用try / except块来避免在ncurses返回错误时简单地退出。
使用“ windows-curses”,底层库可能是PDCurses(除了源代码中的注释之外,没有任何文档)。但是,其面板支持最终来自相同的(Warren Tucker)实现。您可以在source-code中看到错误返回。
就其价值而言,在卖方Unix计算机(例如Solaris)上可能遇到的原始面板库(作者不明)做了同样的事情(请参见Illumos-gate上的source),但是当Tucker开发克隆文件时,提供的文档可能没有用(请参见"documentation")。