1
while True:
    x = []

    while True:
        sense = 0
        for i in range(0,4):
            k = gpio.input(sensor)
            if k = 1:
                sense += 1
                time.sleep(.005)
        if sense == 0:
            x = abc()

上記のコード スニペットは、いくつかのボタンを持つ「Tkinter」を使用して作成した GUI 用です (システム : Raspberry Pi、OS : Fedora で実行)。1 つはセンサーを実行することで、もう 1 つは物体が存在するかどうかを感知することです。センサー (アクティブロー) が (2 番目のボタンが押された後) 20 ミル以上オブジェクトを感知すると、abc() (リスト x に関連する計算) が実行されます。「GUI部分のないコードは問題なく動作します」が、GUIが導入されるとハングします! 誰かがこのコード ブロックの潜在的な間違いを指摘できますか? ここに投稿されたいくつかの質問を確認し、いくつかの変更を行って、完全なコードのどの部分が GUI をハングさせているかを確認し、この部分に絞り込みました

4

1 に答える 1

0

2 つのループが常に実行されています (ただし、2 番目のループを壊すことはないため、最初のループは必要ないと思います) time.sleep。このコードを Tkinter スレッドで実行すると、スレッドが「ビジー」になり、常にこのループが実行されるため、GUI が応答しなくなります。

これを別のスレッドで実行して通信するか、さらに書き直して、Tk.after定期的に ( の代わりにtime.sleep) を呼び出してセンサーの値を取得し、GUI のコンテンツを更新できるようにします。

于 2013-07-20T11:40:23.090 に答える