ルミナール試験機を制御するプログラムを作成しようとしています。 私はtkinter
でGUIをプログラミングしていました。マシン上でテストを行う機能を起動するボタンを作っています。 この機能はマシン上で3つの異なるテストを起動し、GUIには3つのプロセスの結果を個別に更新する必要があるボックス(ttk.Label(root, textvariable=x)
)があります。関数中にtkinterのtexvariableラベルを更新します。
ボタンを押すと3回のテストが正しく開始され、機能が終了するとテキストが正しく更新されます。しかし、私は関数の中でそれを更新し、関数が終了するまで各テストの結果を表示したい。
私は探していて、試していましたが、関数の終了時ではなく、関数の途中でテキストの更新を行うことができませんでした。
誰かが私を助けてくれますか?
は、ここで私が使用して、関数のコードです:長い時間がコードを試した後、
def inittest():
if fn.initground()=='Y':
progtext = ('Ground test has started')
progress.set(progtext)
elif fn.initground()=='N'
progtext = ('Ground test has failed')
progress.set(progtext)
response = fn.receivedata()
if len(response) == 1:
progtext = (progtext + 'Data not received')
progress.set(progtext)
else:
progtext = (progtext + response)
progress.set(progtext)
time.sleep(2)
if fn.initisolate()=='Y':
progtext = ('Isolate test has started')
progress.set(progtext)
elif fn.initisolate()=='N'
progtext = ('Isolate test has failed')
progress.set(progtext)
response = fn.receivedata()
if len(response) == 1:
progtext = (progtext + 'Data not received')
progress.set(progtext)
else:
progtext = (progtext + response)
progress.set(progtext)
time.sleep(2)
if fn.initfun()=='Y':
progtext = ('Function test has started')
progress.set(progtext)
elif fn.initfun()=='N'
progtext = ('Function test has failed')
progress.set(progtext)
response = fn.receivedata()
if len(response) == 1:
progtext = (progtext + 'Data not received')
progress.set(progtext)
else:
progtext = (progtext + response)
progress.set(progtext)
time.sleep(2)
進捗状況がtextvariableであるとすると、time.sleep()ではなく、tkinterのafterコマンドを使用する必要があると思います。私の理解は、睡眠がtkinterの更新を含むすべての処理を中止することです。 – jimscafe
Ok、私はafterを使ってみましたし、同じことが起こっても、textvariableラベルは更新されません。 –
変数を表示して、それらが何を含んでいるかを確認します。応答とlen(応答)で始まります。 len(応答)== 0またはfn.initground()が "Y"または "N"と等しくない場合はどうなりますか? –