سؤال

وأنا على صنع تطبيق صغير مع 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")
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top