tkinterをアクティブにしながらバックグラウンドでタスクを実行しているPython

guylifestyle

プログラムを実行すると、PythonGUIがフリーズします。これが私のメインコードです。スレッド化の手助けをしてもらえますか?したがって、実行はバックグラウンドで行われ、実行を終了したい場合でもGUIの「x」ボタンを使用できますか?現在、プログラムを終了するためにcmdを閉じるようにユーザーに依頼しています。

if __name__ == "__main__":

    root = Tk() 
    root.title('Log')
    root.geometry("400x220") 
    font1=('times', 15)
    font2=('times', 10)
    #Label inside root 
    Label(root, relief=GROOVE, font=font2, text="level").pack() 
    variable = StringVar(root)
    variable.set("INFO") # default value

    w = OptionMenu(root, variable, "CRITICAL", "DEBUG")
    w.pack()
    Button(root, font=font1, background= "yellow", text='START',command=main).pack()
    Label(root, text="To end just close the CMD window").pack()

    root.mainloop()
Al.Sal

更新:launch関数オブジェクトがコールバックとして設定されておらず、呼び出された関数自体が設定されていたため、Buttonコールバックが自動実行されていたことが判明しました。修正は、コールバックを置き換えて、lambda: spawnthread(fcn)代わりに関数オブジェクトがコールバックとして設定されるようにすることです。これを反映するように回答が更新されました。それを逃してすみません。


GUIメインループは、他の関数を実行しようとするとフリーズし、それ自体を再起動する方法がありません(フリーズしているため)。

GUIメインループと一緒に実行したいコマンドがであるとしましょうmyfunction

輸入:

import time
import threading
import Queue

ThreadedClientクラスを設定する必要があります

class ThreadedClient(threading.Thread):
    def __init__(self, queue, fcn):
        threading.Thread.__init__(self)
        self.queue = queue
        self.fcn = fcn
    def run(self)
        time.sleep(1)
        self.queue.put(self.fcn())

def spawnthread(fcn):
    thread = ThreadedClient(queue, fcn)
    thread.start()
    periodiccall(thread)

def periodiccall(thread):
    if(thread.is_alive()):
        root.After(100, lambda: periodiccall(thread))

次に、関数を呼び出すウィジェットが代わりに関数を呼び出すようにしspawnthreadます。

queue = Queue.Queue()

Button(root, text='START',command=lambda: spawnthread(myfunction)).pack() #<---- HERE

NB私はこれを私が持っているマルチスレッドのtkinterGUIから適応させています。私はすべてのフレームをクラスにラップしているので、少し調整しなければならなかったので、これにはいくつかのバグがあるかもしれません。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

バックグラウンドでタスクを実行しているTkinter

分類Dev

RAMにはアクティブなものだけを保持しながら、バックグラウンドで実行されているアイドル状態のソフトウェアのメモリ データをスワップするために転送しますか?

分類Dev

ionic4を使用してバックグラウンドモードがアクティブなときに機能を実行する

分類Dev

バックグラウンドでPythonスクリプトを実行した後、インタラクティブなPythonシェルを開く

分類Dev

小さな非同期タスクがフォアグラウンドを更新できるようにしながら、長時間実行される並列タスクをバックグラウンドで実行する

分類Dev

iOSでバックグラウンドに移動しながらクリーンアップタスクを実行します

分類Dev

バックグラウンドスレッドで実行されているタスクからアニメーションを開始します

分類Dev

バックグラウンドで実行されているクラスから現在実行されているアクティビティにデータを渡す

分類Dev

xcodeから実行しているときにiOSアプリがバックグラウンドタスクのみを続行するように見えるのはなぜですか

分類Dev

Redmiデバイスのバックグラウンドサービスからアクティビティを起動しているときに「アクティビティ画面」に最近のアプリが表示されない理由

分類Dev

アプリが閉じられている場合でも、1時間ごとにバックグラウンドでサービスを実行します

分類Dev

GoogleChromeとInternetExplorerのポップアップウィンドウの閉じるボタンをクリックした後、YouTubeビデオがバックグラウンドで実行されているのはなぜですか?

分類Dev

バッテリー最適化がアクティブなときにバックグラウンドサービスを実行する方法

分類Dev

c#複数のタスクが互いにブロックせずにバックグラウンドで独立して実行されている

分類Dev

Golangでサーバーをリッスンしながらバックグラウンドタスクを実行するためのベストプラクティスは何ですか?

分類Dev

Androidで、特定のBluetoothデバイスが接続されている場合にマイクをアクティブにするバックグラウンドサービスを実行するにはどうすればよいですか?

分類Dev

Python:メインスレッドを継続的に実行し、他のスレッドをバックグラウンドで実行している

分類Dev

Spring Webfluxを使用しているときに応答を返しながら、バックグラウンドでMonoを実行する

分類Dev

OSX Sierraのドックからアクティブなアプリケーションを非表示にしようとしていますが、実行していることでアプリケーションがクラッシュします

分類Dev

ASP MVCで大量の重要なバックグラウンドタスクを実行していますか?

分類Dev

コマンドプロンプトからさまざまなパラメータを取得するバックグラウンドプロセスとしてPythonスクリプトを実行するにはどうすればよいですか?

分類Dev

疑似ttyが割り当てられていると、sshでバックグラウンドタスクを実行できないのはなぜですか?

分類Dev

バックグラウンドスレッドからstartActivityを呼び出し、メインスレッドがブロックされている場合、アクティビティは遅延で始まります

分類Dev

アクティビティからTextViewを更新するタイマーを作成し、アプリがバックグラウンドになると実行を継続する方法

分類Dev

レポートを提供してキャンセルを許可しながら、wpfバックグラウンドでタスクを実行するにはどうすればよいですか?

分類Dev

フォアグラウンドターミナルアクセスを使用してバックグラウンドでコマンドを実行する

分類Dev

フォアグラウンドターミナルアクセスを使用してバックグラウンドでコマンドを実行する

分類Dev

アプリがバックグラウンドにある/実行されていないときに通知クリックで特定のアクティビティを開かない

分類Dev

バックグラウンドスレッドをブロックしながら、バックグラウンドスレッドのメインスレッドでコードを実行する

Related 関連記事

  1. 1

    バックグラウンドでタスクを実行しているTkinter

  2. 2

    RAMにはアクティブなものだけを保持しながら、バックグラウンドで実行されているアイドル状態のソフトウェアのメモリ データをスワップするために転送しますか?

  3. 3

    ionic4を使用してバックグラウンドモードがアクティブなときに機能を実行する

  4. 4

    バックグラウンドでPythonスクリプトを実行した後、インタラクティブなPythonシェルを開く

  5. 5

    小さな非同期タスクがフォアグラウンドを更新できるようにしながら、長時間実行される並列タスクをバックグラウンドで実行する

  6. 6

    iOSでバックグラウンドに移動しながらクリーンアップタスクを実行します

  7. 7

    バックグラウンドスレッドで実行されているタスクからアニメーションを開始します

  8. 8

    バックグラウンドで実行されているクラスから現在実行されているアクティビティにデータを渡す

  9. 9

    xcodeから実行しているときにiOSアプリがバックグラウンドタスクのみを続行するように見えるのはなぜですか

  10. 10

    Redmiデバイスのバックグラウンドサービスからアクティビティを起動しているときに「アクティビティ画面」に最近のアプリが表示されない理由

  11. 11

    アプリが閉じられている場合でも、1時間ごとにバックグラウンドでサービスを実行します

  12. 12

    GoogleChromeとInternetExplorerのポップアップウィンドウの閉じるボタンをクリックした後、YouTubeビデオがバックグラウンドで実行されているのはなぜですか?

  13. 13

    バッテリー最適化がアクティブなときにバックグラウンドサービスを実行する方法

  14. 14

    c#複数のタスクが互いにブロックせずにバックグラウンドで独立して実行されている

  15. 15

    Golangでサーバーをリッスンしながらバックグラウンドタスクを実行するためのベストプラクティスは何ですか?

  16. 16

    Androidで、特定のBluetoothデバイスが接続されている場合にマイクをアクティブにするバックグラウンドサービスを実行するにはどうすればよいですか?

  17. 17

    Python:メインスレッドを継続的に実行し、他のスレッドをバックグラウンドで実行している

  18. 18

    Spring Webfluxを使用しているときに応答を返しながら、バックグラウンドでMonoを実行する

  19. 19

    OSX Sierraのドックからアクティブなアプリケーションを非表示にしようとしていますが、実行していることでアプリケーションがクラッシュします

  20. 20

    ASP MVCで大量の重要なバックグラウンドタスクを実行していますか?

  21. 21

    コマンドプロンプトからさまざまなパラメータを取得するバックグラウンドプロセスとしてPythonスクリプトを実行するにはどうすればよいですか?

  22. 22

    疑似ttyが割り当てられていると、sshでバックグラウンドタスクを実行できないのはなぜですか?

  23. 23

    バックグラウンドスレッドからstartActivityを呼び出し、メインスレッドがブロックされている場合、アクティビティは遅延で始まります

  24. 24

    アクティビティからTextViewを更新するタイマーを作成し、アプリがバックグラウンドになると実行を継続する方法

  25. 25

    レポートを提供してキャンセルを許可しながら、wpfバックグラウンドでタスクを実行するにはどうすればよいですか?

  26. 26

    フォアグラウンドターミナルアクセスを使用してバックグラウンドでコマンドを実行する

  27. 27

    フォアグラウンドターミナルアクセスを使用してバックグラウンドでコマンドを実行する

  28. 28

    アプリがバックグラウンドにある/実行されていないときに通知クリックで特定のアクティビティを開かない

  29. 29

    バックグラウンドスレッドをブロックしながら、バックグラウンドスレッドのメインスレッドでコードを実行する

ホットタグ

アーカイブ