appJar python:按钮按下动作

appJar python: button press action

我正在尝试使用 python3appJar 上进行 GUI 编程的实践经验。我正在尝试添加一个在按下按钮时发生的动作。它工作正常,但奇怪地结束了。

部分代码如下。只要按下按钮,函数 "pressed" 就会被调用。它工作正常。但是,当计数达到 0 时,数字 0 不会被按下(尽管根据代码,数字 0 应该打印在名为 "lb1" 的标签上)。 当按下按钮并且计数变量 =1 时,计数变量应该减一,然后标签文本应该用新的计数数字更新。然后,它检查计数器是否为 0,如果为真,则退出代码。 现在,表单在用新值更新标签之前就终止了。通过一些故障排除,我发现标签值仅在表单终止时更新,尽管更新它的代码行已经执行。

任何人都可以对此有所了解吗?

from appJar import gui
count=10
def pressed(btnName):
    global count
    count-=1
    win.setLabel("lb1","Count= "+ str(count))
    if count==0:
        win.stop()

我认为您看到的是预期的行为。

当计数达到 0 时 - 标签更新排队等待发生,但随后下一行代码停止了 GUI,这将在几毫秒后发生 - 因此 GUI 将在有机会更新之前消失更新屏幕上显示的内容。

如果你想在标签更新和 GUI 关闭之间引入一个轻微的延迟,你可以使用 .after() 函数。

例如:

if count == 0:
    win.after(500, win.stop)

这将在调用停止函数之前延迟 500 毫秒。


或者,如果您希望 GUI 保持打开状态,显示 Count= 0,并且仅在用户下次按下按钮时关闭,请将您的原始代码更改为仅在 [= 时调用 win.stop() 15=]


因此,完整代码可能如下所示:

from appJar import gui 
count=10
def pressed(btnName):
    global count
    count-=1
    win.setLabel("lb1","Count= "+ str(count))
    if count == 0:
        win.after(500, win.stop)

win = gui()
win.addLabel("lb1", "empty")
win.addButton("PRESS", pressed)
win.go()