Python 저주 update_panels() 및 Panel.move() 문제 (Python Curses update_panels() and Panel.move() issues)


문제 설명

Python 저주 update_panels() 및 Panel.move() 문제 (Python Curses update_panels() and Panel.move() issues)

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

무엇이 잘못된 것인지 알아내느라 고생했지만 아무데도 가고 있지 않으며 어떤 지침이라도 매우 감사할 것입니다.

표준 Windows 명령 프롬프트( x64 Windows 10 Pro(v10.0.18362) 시스템의 v10.0.18362.449)


참조 솔루션

방법 1:

ncurses' move_panel function returns the result from mvwin, which is documented as follows:

Calling mvwin moves the window so that the upper left‑hand corner is at position (x, y). If the move would cause the window to be off the screen, it is an error and the window is not moved. Moving subwindows is allowed, but should be avoided.

In python, you'd have to use a try/except block to avoid simply exiting when there is an error‑return from ncurses.

Using "windows‑curses", the underlying library is probably PDCurses (which has no documentation aside from comments in the source‑code). However, its panel‑support ultimately came from the same (Warren Tucker) implementation. You can see the error‑returns in the source‑code.

For what it's worth, the original panel library (author unknown) that one might have encountered in a vendor Unix machine (such as Solaris) did the same thing (see source on Illumos‑gate), but the documentation provided could not have been useful when Tucker developed a clone (see "documentation").

(by abmxThomas Dickey)

참조 문서

  1. Python Curses update_panels() and Panel.move() issues (CC BY‑SA 2.5/3.0/4.0)

#panel #Python #curses #ncurses






관련 질문

R을 사용하여 패널 데이터의 마지막 이벤트 이후 실행 계산 (Using R to count a run since last event in panel data)

버튼을 클릭한 후 한 패널을 표시하고 동일한 프레임에서 두 번째 버튼을 클릭하면 다른 패널을 표시합니다. (show one panel after button is clicked and other panel when second button is clicked in the same frame)

외부를 클릭하면 패널을 닫아야 함(초점 상실) (Need To Close A Panel When Clicked Outside (Lost Focus))

asp.net gridview - updatepanel을 사용하여 행당 여러 줄에 바인딩된 데이터 분산 (asp.net gridview - spread bound data across multi lines per row with updatepanel)

문자를 포함하는 고유 식별자와 함께 xtreg 사용 (Using xtreg with unique identifier that includes letters)

matlab SVM은 NaN을 반환합니다. (matlab SVM returns NaN)

특정 형식의 JAVA GUI 제작에 대한 질문 (Question about making a JAVA GUI of a certain format)

슬라이딩 패널 구분선을 사용하여 HTML 페이지를 다른 섹션으로 분할하시겠습니까? 어떻게 이루어지나요? (Splitting HTML page into different sections using sliding panel dividers? How is it done?)

Swift Mac Os 응용 프로그램 - NSSavePanel이 '백그라운드 전용' 응용 프로그램에서 올바르게 작동하지 않습니다. (Swift Mac Os Application - NSSavePanel does not behave correctly with a 'background only' application)

Python 저주 update_panels() 및 Panel.move() 문제 (Python Curses update_panels() and Panel.move() issues)

stargazer를 사용하여 plm FE 회귀에서 전체 R2를 얻는 방법은 무엇입니까? (How to get between and overall R2 from plm FE regression with stargazer?)

Java, 패널용 그래픽 개체 생성 및 편집? (Java, create and edit a Graphics Object for Panel?)







코멘트