Tkinter: استدعاء الحدث في حلقة رئيسية
-
06-07-2019 - |
سؤال
وكيف استدعاء event
tkinter من كائن منفصل؟
وأنا أبحث عن شيء من هذا القبيل كويدغيتس wx.CallAfter
. على سبيل المثال، إذا كنت إنشاء كائن، ويمر بها بلدي المثال Tk
الجذر، ومن ثم محاولة استدعاء أسلوب من تلك النافذة الجذر من وجوه بلدي، أقفال التطبيق حتى.
وأفضل ما يمكن أن تصل لاستخدام أسلوب after
والتحقق من حالة من وجهة نظري كائن منفصل، ولكن يبدو أن الإسراف.
المحلول
للرد على سؤال محدد من "كيف استدعاء الحدث TkInter من كائن مستقل"، استخدم الأمر event_generate
. انها تسمح لك لحقن الأحداث في قائمة انتظار الحدث من النافذة الجذر. جنبا إلى جنب مع قوة آلية الحدث الظاهري تاكا ليصبح رسالة يمر آلية يدوية.
وعلى سبيل المثال:
from tkinter import *
def doFoo(*args):
print("Hello, world")
root = Tk()
root.bind("<<Foo>>", doFoo)
# some time later, inject the "<<Foo>>" virtual event at the
# tail of the event queue
root.event_generate("<<Foo>>", when="tail")
ملاحظة أن الدعوة event_generate
سيعود فورا. ليس واضحا اذا كان هذا ما تريد أو لا. عموما كنت لا تريد برنامج الحدث استنادا لمنع انتظار استجابة لحدث معين لأنه سوف <م> تجميد GUI م>.
ولست متأكدا إذا كان هذا يحل مشكلتك الرغم من ذلك؛ دون رؤية الشفرة لست متأكدا ما هي المشكلة الحقيقية الخاصة بك. أستطيع، على سبيل المثال، طرق الوصول للجذر في منشئ كائن حيث يتم تمرير الجذرية في دون التطبيق حبس. هذا يقول لي هناك شيء آخر يحدث في التعليمات البرمجية.
وهنا مثال من وسائل الوصول بنجاح على نافذة الجذر من بعض وجوه أخرى:
from tkinter import *
class myClass:
def __init__(self, root):
print("root background is %s" % root.cget("background"))
root = Tk()
newObj = myClass(root)
نصائح أخرى
وهنا فقط تحت بعض وثيقة وتصل إلى فهم أفضل إجابة بريان أعلاه.
ووصف وظيفة من نيو مكسيكو تك :
وw.event_generate(sequence, **kw)
وهذه الطريقة تسبب حدث لتحريك دون أي حافز خارجي. التعامل مع الحدث هو نفسه كما لو كان قد تم تشغيله من قبل حافز خارجي. يصف حجة تسلسل الحدث يمكن تشغيلها. يمكنك تعيين قيم الحقول المحددة في كائن الحدث من خلال توفير الكلمة = الحجج القيمة، حيث تحدد الكلمة اسم حقل في الكائن الحدث.
اقتباس فقرة>وقائمة ووصف الحدث تى سى ال / المعارف التقليدية سمات هنا