Rumah >pembangunan bahagian belakang >Tutorial Python >Bagaimana untuk Mencegah GUI Tkinter daripada Membeku Semasa Menunggu Benang untuk Selesai?

Bagaimana untuk Mencegah GUI Tkinter daripada Membeku Semasa Menunggu Benang untuk Selesai?

Patricia Arquette
Patricia Arquetteasal
2024-11-03 05:22:03577semak imbas

How to Prevent Tkinter GUI from Freezing While Waiting for a Thread to Finish?

Membekukan/Menggantung GUI tkinter dalam menunggu benang selesai

Dalam contoh ini, GUI membeku apabila butang ditekan kerana utas utama sedang menunggu untuk benang yang dibuat oleh Thread(target = self.threaded_function) selesai sebelum meneruskan. Untuk memastikan GUI responsif, adalah penting untuk mengelak daripada menyekat urutan utama.

Berikut ialah pelaksanaan alternatif yang menggunakan baris gilir untuk menghantar data antara urutan dan GUI:

queue = Queue()

def threaded_function():
    while True:
        if not queue.empty():
            item = queue.get()
            print(item)
            # Do other processing here

def helloCallback():
    queue.put("asd")

m = magic()
B = tkinter.Button(top, text = "Hello", command = helloCallback)
B.pack()
top.mainloop()

# Start the thread in the background
t = threading.Thread(target = threaded_function)
t.start()

Dalam ini pelaksanaan, benang GUI terus responsif manakala threaded_function berjalan di latar belakang. Baris Gilir digunakan untuk menyampaikan data antara dua utas. Apabila fungsi helloCallback dipanggil, ia menambahkan item pada baris gilir yang kemudiannya diambil oleh threaded_function dan diproses.

Atas ialah kandungan terperinci Bagaimana untuk Mencegah GUI Tkinter daripada Membeku Semasa Menunggu Benang untuk Selesai?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn