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!