Python Curses.Newwin لا يعمل
سؤال
أنا أتعلم اللعنات لأول مرة ، وقررت أن أفعل ذلك في بيثون لأنه سيكون أسهل من إعادة التجميع باستمرار. ومع ذلك ، لقد ضربت عقبة. عندما أحاول تحديث نافذة Seccond ، لا أحصل على إخراج. إليك مقتطف رمز:
import curses
win = curses.initscr()
curses.noecho()
curses.cbreak()
curses.curs_set(0)
field = curses.newwin(1, 20, 1, 1)
field.addstr(0, 0, "Hello, world!", curses.A_REVERSE)
field.refresh()
تعمل نافذة الفوز العادية التي تم تهيئتها باستخدام Initscr () ، لكن نافذة الحقل لا تظهر. أي مساعدة؟
تحرير: إليك الرمز الجديد المنقح ، والذي لا يزال لا يعمل.
import curses
ex = None
def main(stdscr):
global ex
try:
curses.curs_set(0)
except Exception, e:
ex = e
field = curses.newwin(25, 25, 6, 6)
field.border()
cont = True
x, y = 0, 0
while cont:
stdscr.clear()
field.clear()
coords = "%d, %d" % (x, y)
stdscr.addstr(5, 5, coords, curses.A_REVERSE)
field.addstr(y+2, x+2, "@", curses.A_BOLD)
chr = stdscr.getkey()
if chr == 'h':
if x > 0: x -= 1
if chr == 'l':
if x < 20: x += 1
if chr == 'j':
if y > 0: y -= 1
if chr == 'k':
if y < 20: y += 1
if chr == 'q':
cont = False
stdscr.clear()
field.clear()
stdscr.noutrefresh()
field.noutrefresh()
curses.doupdate()
curses.wrapper(main)
if ex is not None:
print 'got %s (%s)' % (type(ex).__name__, ex)
المحلول 2
آه ، وجدت المشكلة. عندما أستخدم stdscr.clear () ، فإنه يقوم بتطهير المحطة بأكملها ، بما في ذلك النافذة الجديدة. كل ما أحتاجه هو صنع نوافذ ، واحدة لكل شاشة منفصلة.
أوه ، وبفضل أعلاه على TURSES.WRAPPER TIP. قول هنا لأنني لا أستطيع نشر تعليق.
نصائح أخرى
يبدو لي على ما يرام - أنا دائما أستخدم curses.wrapper
ولا يدعم محطة بلدي المؤشر رؤية 0 ، لذلك هذا ما لدي ...:
import curses
ex = None
def main(stdscr):
global ex
try:
curses.curs_set(0)
except Exception, e:
ex = e
field = curses.newwin(1, 20, 1, 1)
field.addstr(0, 0, "Hello, world!", curses.A_REVERSE)
field.refresh()
field.getch()
curses.wrapper(main)
if ex is not None:
print 'got %s (%s)' % (type(ex).__name__, ex)
أرى العكس "مرحبا ، العالم!" ، ثم عندما ضربت أي مفتاح لإرضاء getch
ينتهي البرنامج مع MSG المتوقع got error (curs_set() returned ERR)
.
ماذا ترى مع هذا البرنامج ...؟ (تذكر أن الغلاف يفعل initscr
ومجموعات noecho
و cbreak
-والأهم من ذلك إعادة تعيينه عند الانتهاء ، وهذا هو السبب في أنني دائمًا أستخدمه ؛-).
راجع للشغل ، أنا أستخدم PY 2.6.4 على جهاز Mac (OSX 10.5.8) و Terminal.App. منصتك ...؟