تجميد / تعليق واجهة المستخدم الرسومية tkinter في انتظار اكتمال الخيط
تواجه مشكلة شائعة عند العمل مع مجموعة أدوات tkinter GUI في Python واجهة مجمدة أو معلقة عند إجراء عمليات معينة. غالبًا ما يرجع ذلك إلى استخدام عمليات الحظر، مثل الانضمام إلى سلاسل الرسائل، داخل حلقة الحدث الرئيسية.
فهم tkinter Mainloop
إن tkinter mainloop() هو مسؤول عن التعامل مع مدخلات المستخدم وتحديث واجهة المستخدم الرسومية. يتم تشغيله بشكل مستمر في مؤشر ترابط واحد، ويستقبل الأحداث ويعالجها. أي عملية تحظر الحلقة الرئيسية، مثل انتظار اكتمال سلسلة الرسائل، يمكن أن تتسبب في عدم استجابة واجهة المستخدم الرسومية.
الحل: استخدام الأسلوب اللاحق للمهام غير المتزامنة
] لتجنب حظر الحلقة الرئيسية، فكر في استخدام الأسلوب after()، الذي يسمح بجدولة المهام ليتم تشغيلها على فترات زمنية محددة. من خلال استطلاع قائمة انتظار بشكل دوري أو تنفيذ مهام أخرى في الخلفية، يمكنك التأكد من أن واجهة المستخدم الرسومية تظل مستجيبة.
فصل واجهة المستخدم الرسومية عن المهام غير المتزامنة
لتنفيذ ذلك، افصل منطق واجهة المستخدم الرسومية من المهمة غير المتزامنة. قم بإنشاء فئة تتعامل مع واجهة المستخدم الرسومية، ومعالجة الرسائل من قائمة الانتظار ضمن طريقة مجدولة بانتظام after(). في سلسلة رسائل أخرى، قم بتشغيل المهمة غير المتزامنة وملء قائمة الانتظار بالرسائل حسب الحاجة.مثال على الكود
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