"यदि कोई कर्मचारी अपना काम अच्छी तरह से करना चाहता है, तो उसे पहले अपने औजारों को तेज करना होगा।" - कन्फ्यूशियस, "द एनालेक्ट्स ऑफ कन्फ्यूशियस। लू लिंगगोंग"
मुखपृष्ठ > प्रोग्रामिंग > थ्रेड समाप्त होने की प्रतीक्षा करते समय अपने टिंकर जीयूआई को कैसे उत्तरदायी रखें?

थ्रेड समाप्त होने की प्रतीक्षा करते समय अपने टिंकर जीयूआई को कैसे उत्तरदायी रखें?

2024-11-06 को प्रकाशित
ब्राउज़ करें:753

How to Keep Your tkinter GUI Responsive When Waiting for Threads to Finish?

थ्रेड पूरा होने की प्रतीक्षा में टिंकर जीयूआई को फ्रीज करना/लटकाना

पायथन में टिंकर जीयूआई टूलकिट के साथ काम करते समय एक आम समस्या का सामना करना पड़ रहा है कुछ ऑपरेशन करते समय एक जमे हुए या लटका हुआ इंटरफ़ेस। ऐसा अक्सर ब्लॉकिंग ऑपरेशंस के उपयोग के कारण होता है, जैसे मुख्य इवेंट लूप के भीतर थ्रेड्स को जोड़ना।

टिंकर मेनलूप को समझना

टिंकर मेनलूप() है उपयोगकर्ता इनपुट को संभालने और जीयूआई को अपडेट करने के लिए जिम्मेदार। यह एक ही थ्रेड में लगातार चलता रहता है, इवेंट प्राप्त करता है और प्रोसेस करता है। कोई भी ऑपरेशन जो मेनलूप को अवरुद्ध करता है, जैसे थ्रेड के पूरा होने की प्रतीक्षा करना, GUI को अनुत्तरदायी बना सकता है।

समाधान: एसिंक्रोनस कार्यों के लिए आफ्टर मेथड का उपयोग करना

मेनलूप को ब्लॉक करने से बचने के लिए, आफ्टर() विधि का उपयोग करने पर विचार करें, जो शेड्यूलिंग कार्यों को विशिष्ट अंतराल पर चलाने की अनुमति देता है। समय-समय पर कतार में मतदान करके या पृष्ठभूमि में अन्य कार्य करके, आप यह सुनिश्चित कर सकते हैं कि GUI उत्तरदायी बना रहे।

GUI और एसिंक्रोनस कार्यों को अलग करना

इसे लागू करने के लिए, अलग करें अतुल्यकालिक कार्य से जीयूआई तर्क। एक क्लास बनाएं जो जीयूआई को संभालती है, एक कतार से संदेशों को नियमित रूप से निर्धारित आफ्टर() विधि के भीतर संसाधित करती है। दूसरे थ्रेड में, एसिंक्रोनस कार्य चलाएं और आवश्यकतानुसार संदेशों के साथ कतार को पॉप्युलेट करें।

उदाहरण कोड

from threading import Thread
from queue import Queue
import tkinter as tk

class GuiPart:
    def __init__(self, master, queue):
        self.queue = queue
        # Set up GUI elements here

    def process_incoming(self):
        while not self.queue.empty():
            message = self.queue.get()
            # Process and handle the message here

class AsynchronousTask:
    def __init__(self, queue):
        self.queue = queue

    def run(self):
        # Perform asynchronous task here
        # Put messages into the queue as needed

def start_gui():
    root = tk.Tk()
    queue = Queue()
    gui = GuiPart(root, queue)
    async_task = AsynchronousTask(queue)
    # Start the asynchronous task in a separate thread
    t = Thread(target=async_task.run)
    t.start()
    # Start the GUI mainloop
    root.mainloop()

if __name__ == "__main__":
    start_gui()

यह कोड दर्शाता है कि जीयूआई तर्क को अतुल्यकालिक कार्य से कैसे अलग किया जाए, यह सुनिश्चित करते हुए कि कार्य पृष्ठभूमि में चलने के दौरान जीयूआई उत्तरदायी बना रहे।

नवीनतम ट्यूटोरियल अधिक>

चीनी भाषा का अध्ययन करें

अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।

Copyright© 2022 湘ICP备2022001581号-3