我正在嘗試獲取appJar與python3的GUI編程實踐經驗。我正在嘗試添加按鈕按下時發生的操作。它工作正常,但它奇怪地結束。appJar python:按下按鈕動作
部分代碼如下。只要按下按鈕,就會調用「按下」功能。它工作正常。但是,當計數達到0時,數字0未被按下(儘管按照代碼,數字0應打印在名爲「lb1」的標籤上)。 當按下按鈕並且count變量= 1時,計數變量應該減1,然後標籤文本應該用新計數編號更新。然後,它檢查計數器是否爲0,如果爲true,則退出代碼。 現在,表單在用新值更新標籤之前終止。通過一些故障排除,我發現標籤值僅在表單終止時更新,儘管更新它的代碼行已經執行。
任何人都可以對此有所瞭解?
from appJar import gui
count=10
def pressed(btnName):
global count
count-=1
win.setLabel("lb1","Count= "+ str(count))
if count==0:
win.stop()
非常感謝您的回覆。我在win.stop()之前使用了sleep(),但它不起作用。該標籤僅在功能退出時才更新 我試過你的解決方案。它沒有像你解釋的那樣工作。我使用.after(),但無論我使用什麼值,在計數器達到零後,GUI窗體立即退出。儘管如此,程序結束延遲(我可以從控制檯看到),但不是GUI。換句話說,GUI表單立即退出,但程序繼續運行以配置_delay_值。 我可以得出結論:.after()方法在GUI退出之後添加延遲,而不是之前。 –
使用'sleep()'會暫停GUI線程 - 防止發生任何更新。一旦'sleep()'完成,GUI將立即退出 - 所以你不會看到標籤更新。 我已更新我的原始答案以包含示例代碼清單。 '.after()'在GUI的事件循環中排隊函數調用,所以GUI將被更新,並且只有在指定的毫秒數(在本例中爲500)之後GUI纔會退出。 –
非常感謝。這解決了問題。仔細檢查代碼後,我發現我沒有準確使用.after()方法。我寫了win.after(200,win.stop()) 而不是 win.after(200,win.stop) 這就是爲什麼我第一次沒有工作。現在它的工作成功了。謝謝。 –