私は、GUIプログラミングのためにappJarとpython3で手作業を体験しようとしています。私は、ボタンが押されたときに行われるアクションを追加しようとしています。それは正常に動作しますが、それは不思議に終わります。appJar python:button press action
コードの一部は次のとおりです。ボタンが押されるたびに関数「pressed」が呼び出されます。それはうまく動作します。しかし、カウントが0になると、数字0は押されません(ただし、コードごとに0というラベルを "lb1"というラベルに印刷する必要があります)。 ボタンが押され、count変数が1の場合、count変数は1だけ減算されます。次に、ラベルテキストが新しいcount数で更新されます。次に、カウンタ= 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()
ありがとうございました。私は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) これは初めてのことです。今は正常に動作しています。ありがとうございました。 –