python诅咒中的连续更新字符串

python诅咒中的连续更新字符串,python,curses,Python,Curses,为了学习诅咒,我编写了这个脚本,让用户输入两个数字,然后输出它们的和和和差: import curses screen = curses.initscr() screen.refresh() height = 4 width = 25 abwindow = curses.newwin(height, width, int(0.15*int(curses.LINES)), int(curses.COLS/2) - width) abwindow.addstr(1, 2, "a is : ")

为了学习诅咒,我编写了这个脚本,让用户输入两个数字,然后输出它们的和和和差:

import curses

screen = curses.initscr()
screen.refresh()

height = 4
width = 25
abwindow =  curses.newwin(height, width, int(0.15*int(curses.LINES)), int(curses.COLS/2) - width)
abwindow.addstr(1, 2, "a is : ")
abwindow.addstr(2, 2, "b is : ")

abwindow.border()
abwindow.refresh()

sumdiffwindow = curses.newwin(height, width, int(0.15*int(curses.LINES)), int(curses.COLS/2))
sumdiffwindow.addstr(1, 2, "a + b is : ")
sumdiffwindow.addstr(2, 2, "a - b is : ")

sumdiffwindow.border()
sumdiffwindow.refresh()

atocheck = abwindow.getstr(1, 10, 7)
btocheck = abwindow.getstr(2, 10, 7)

try:
    a = float(atocheck)
    b = float(btocheck)
    sum = a + b
    diff = a - b
    sumdiffwindow.addstr(1, 14, "%g" %(sum))
    sumdiffwindow.addstr(2, 14, "%g" %(diff))
except ValueError:
    sumdiffwindow.addstr(1, 14, "nan")
    sumdiffwindow.addstr(2, 14, "nan")

sumdiffwindow.refresh()
curses.curs_set(0)

while True:
    curses.noecho()
    c = screen.getch(1, 1)
    if c == ord('q') or c == ord('Q'):
        break

curses.endwin()

一旦输入了两个数字(如果它们是数字),它就会计算和和和差,然后它会一直闲置,直到用户按“q”返回终端。如何更改它,以便在连续显示其当前和和差的同时,可以根据需要更新
a
b
(使用键盘上下箭头在两个输入框之间导航)?

您可以通过将窗口超时设置为较小的值,例如10(毫秒)来完成此操作。如果使用
nodelay
,则箭头键不起作用


这样做会使
getch
在短时间后返回(可能有错误…)。完成后,更新屏幕的其他部分,然后返回,请求
getch
输入,直到返回有效的内容(如向上箭头键)。

我对诅咒也不熟悉,但我尝试了一些帮助。 显示结果后,如果按除
q
以外的任何键,所有键都将像开始一样更新。但是,如果按
q
,代码将退出

import curses
import time
import sys

def main():
    screen = curses.initscr()
    screen.refresh()
    height = 4
    width = 25
    abwindow =  curses.newwin(height, width, int(0.15*int(curses.LINES)), int(curses.COLS/2) - width)
    abwindow.addstr(1, 2, "a is : ")
    abwindow.addstr(2, 2, "b is : ")

    abwindow.border()
    abwindow.refresh()

    sumdiffwindow = curses.newwin(height, width, int(0.15*int(curses.LINES)), int(curses.COLS/2))
    sumdiffwindow.addstr(1, 2, "a + b is : ")
    sumdiffwindow.addstr(2, 2, "a - b is : ")

    sumdiffwindow.border()
    sumdiffwindow.refresh()
    curses.echo()
    atocheck = abwindow.getstr(1, 10, 7)
    btocheck = abwindow.getstr(2, 10, 7)

    try:
        a = float(atocheck)
        b = float(btocheck)
        sum = a + b
        diff = a - b
        sumdiffwindow.addstr(1, 14, "%g" %(sum))
        sumdiffwindow.addstr(2, 14, "%g" %(diff))
    except ValueError:
        sumdiffwindow.addstr(1, 14, "nan")
        sumdiffwindow.addstr(2, 14, "nan")
    sumdiffwindow.refresh()
    curses.curs_set(0)
    curses.noecho()
    c = screen.getch(1, 1)
    if c == ord('q') or c == ord('Q'):
        sys.exit()


while True:
    main()

我认为我没有足够的经验来充分理解您提出的解决方案,您能发布一个工作示例吗?我对
诅咒
没有经验,但我认为您必须使用
窗口。超时(延迟)
,如下所示:@noibe