2016-04-19 12 views
0

ルミナール試験機を制御するプログラムを作成しようとしています。 私は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) 
+0

進捗状況がtextvariableであるとすると、time.sleep()ではなく、tkinterのafterコマンドを使用する必要があると思います。私の理解は、睡眠がtkinterの更新を含むすべての処理を中止することです。 – jimscafe

+0

Ok、私はafterを使ってみましたし、同じことが起こっても、textvariableラベルは更新されません。 –

+0

変数を表示して、それらが何を含んでいるかを確認します。応答とlen(応答)で始まります。 len(応答)== 0またはfn.initground()が "Y"または "N"と等しくない場合はどうなりますか? –

答えて

0

[OK]を、私は最終的に動作するコードを得ました。 関数が開始する前にグローバル値を設定し、テストが完了するたびに変更します。この後、私は関数を思い出し、設定されたグローバル値のために2番目のテストを開始します。 ここに私が使用するコードがあります。 ありがとうございました。

global action 
action = 1 

def inittest(): 

    global action 

    if action == 1: 
     def testground(): 
     global progtext 
     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) 
    action = 2 
    testground() 
    root.after(1000, inittest) 

    if action == 2: 

     def testisolate(): 
     global progtext 
     if initisolate()=='Y': 
      progtext = (progtext + 'Isolate test has started') 
      progress.set(progtext) 
     elif fn.initisolate()=='N' 
      progtext = (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) 
    action = 3 
    testisolate() 
    root.after(1000, inittest) 

    if action == 3: 

     def testfun(): 
     global progtext 
     if initfun()=='Y': 
      progtext = (progtext + 'Function test has started') 
      progress.set(progtext) 
     elif fn.initfun()=='N' 
      progtext = (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) 
    action = 1 
    testfun() 
関連する問題