tkinter GUI의 버튼을 누르면 인터페이스가 정지되는 경우가 많습니다. 스레딩을 활용했음에도 불구하고 문제가 지속됩니다. Python Cookbook의 조언을 활용하여 비동기 작업을 실행하는 동안 GUI 응답성을 유지하는 솔루션은 다음과 같습니다.
GUI 정지의 주요 원인은 조인( )을 백그라운드 스레드에서 실행합니다. 이를 방지하기 위한 더 나은 접근 방식은 "폴링" 메커니즘을 구현하는 것입니다.
Tkinter의 범용 after() 메서드를 사용하면 정기적으로 대기열을 지속적으로 모니터링할 수 있습니다. 이를 통해 스레드 완료를 기다리는 동안 GUI가 응답 상태를 유지할 수 있습니다.
다음 코드는 이 접근 방식을 예시합니다.
<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>
이 예에서 GUI와 백그라운드 스레드는 큐를 통해 처리되므로 GUI를 정지하지 않고 비동기 실행이 가능합니다.
위 내용은 스레드가 완료되기를 기다리는 동안 Tkinter GUI 정지를 방지하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!