الأحداث التي يمكن أن تكون ملزمة لإطار Tkinter؟
-
05-07-2019 - |
سؤال
وأنا على صنع تطبيق صغير مع Tkinter. وأود أن تنظيف بعض الأشياء في وظيفة تسمى عند إغلاق نافذتي. واني اسعى الى ربط <م> الحدث وثيق م> من نافذتي مع أن وظيفة. أنا لا أعرف إذا كان من الممكن وما هو تسلسل المقابلة.
وثائق بيثون تقول: See the bind man page and page 201 of John Ousterhout’s book for details
ولسوء الحظ، ليس لدي هذه الموارد في يدي. لا أحد يعرف على قائمة الأحداث التي يمكن أن تكون ملزمة؟
والحل البديل سيكون لتنظيف كل شيء في __del__
من صفي الإطار. لسبب غير معروف يبدو أن يطلق عليه أبدا. لا أحد يعرف ما يمكن أن يكون السبب؟ بعض تبعيات دائرية؟
وبمجرد، أود أن أضيف عنصر تحكم (غير تعليق في التعليمات البرمجية أدناه)، لا يتم استدعاء __del__
بعد الآن. أي حل لهذه المشكلة؟
from tkinter import *
class MyDialog(Frame):
def __init__(self):
print("hello")
self.root = Tk()
self.root.title("Test")
Frame.__init__(self, self.root)
self.list = Listbox(self, selectmode=BROWSE)
self.list.pack(fill=BOTH, expand=1)
self.pack(fill=BOTH, expand=1)
def __del__(self):
print("bye-bye")
dialog = MyDialog()
dialog.root.mainloop()
المحلول
هذا هي الصفحة ربط الرجل الذي قد يكون كانت تبحث عن. وأعتقد أن الحدث الذي تحاول ربط هو Destroy
. لا ينبغي الاعتماد على __del__
(فقط من الصعب جدا أن تعرف متى حلقة مرجع معاد، على سبيل المثال الأم إلى الطفل القطعة والظهر، وسوف يمنعه من اثار!)، وذلك باستخدام الحدث الملزم هو بالتأكيد الأفضل.
نصائح أخرى
ومورد أكثر أو أقل النهائي للأحداث هو الصفحة رجل لتاكا . أنا ليس من الواضح بالضبط ما كنت ترغب في القيام به، ولكن ملزمة لل"<Destroy>"
وربما كان الحدث الذي تبحث عنه. سواء كان يفعل ما تحتاجه حقا، وأنا لا أعرف.
...
self.bind("<Destroy>", self.callback)
...
def callback(self, event):
print("callback called")