Apabila butang pada GUI tkinter ditekan, ia selalunya mengakibatkan antara muka menjadi beku. Walaupun menggunakan threading, isu ini berterusan. Dengan memanfaatkan nasihat daripada Buku Masakan Python, berikut ialah penyelesaian untuk mengekalkan responsif GUI semasa melaksanakan tugas tak segerak:
Penyebab utama di sebalik pembekuan GUI ialah penggunaan join( ) pada benang latar belakang. Untuk mengelakkan perkara ini, pendekatan yang lebih baik ialah melaksanakan mekanisme "pengundian".
Kaedah selepas() universal Tkinter membolehkan pemantauan berterusan Baris pada selang masa yang tetap. Ini membolehkan GUI kekal responsif semasa menunggu urutan selesai.
Kod berikut menunjukkan pendekatan ini:
<code class="python">import Tkinter as tk import threading import queue # Create a queue for communication queue = queue.Queue() # Define the GUI portion class GuiPart(object): def __init__(self, master, queue): # Set up the GUI tk.Button(master, text='Done', command=self.end_command).pack() def processIncoming(self): while not queue.empty(): # Handle incoming messages here def end_command(self): # Perform necessary cleanup and exit # Define the threaded client class ThreadedClient(object): def __init__(self, master): # Set up GUI and thread self.gui = GuiPart(master, queue) self.thread = threading.Thread(target=self.worker_thread) self.thread.start() # Start periodic checking of the queue self.periodic_call() def periodic_call(self): self.gui.processIncoming() master.after(200, self.periodic_call) def worker_thread(self): # Perform asynchronous I/O tasks here, adding messages to the queue # Main program root = tk.Tk() client = ThreadedClient(root) root.mainloop()</code>
Dalam contoh ini, komunikasi antara GUI dan benang latar belakang dikendalikan melalui baris gilir, membenarkan pelaksanaan tak segerak tanpa membekukan GUI.
Atas ialah kandungan terperinci Bagaimana untuk Mencegah Pembekuan GUI Tkinter Semasa Menunggu Benang untuk Dilengkapkan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!