سؤال

أواجه مشكلة مع نوافذ Bygtk و GTK Builder. إليك نسخة مبسطة من التعليمات البرمجية الخاصة بي.

class GUI:
def __init__(self,parent):
    builder_file = "./ui/window.builder"
    self.builder = gtk.Builder()
    self.builder.add_from_file(builder_file)

    self.window = self.builder.get_object('main')
    self.builder.connect_signals( self )
    self.populate_window()
    self.window.show()

def populate_window(self):
    hbox = self.builder.get_object('hbox')
    hbox.pack_start( somewidgets )

def on_destroy(self):
    self.window.destroy()

يحتوي ملف Builder GTK على نافذة Toplevel مع صندوق تعبئة أفقي وإشارة إلى تدمير. يبدو أن هذا يعمل ويتم إنشاء النافذة وتسجيلها على ما يرام، ولكن إذا حاولت تدمير النافذة التي تم ملؤها بأي وحدات موسيقية أخرى python segfaults.

أفكر في هذه القضية مع تعبئة الحاجيات الجديدة التي ليست في ملف Builder، لذلك لا يعرف pygtk كيفية ضمها، لكنني لست متأكدا رغم ذلك.

شكرا على اي مساعدة.

هل كانت مفيدة؟

المحلول

يتم استدعاء معالج "تدمير" الخاص بك عندما تكون النافذة لتدمير بعد، لذلك جزء التعليمات البرمجية هذا:

def on_destroy(self):
    self.window.destroy()

سوف تولد مكالمة متكررة لا حصر لها. بعبارات أخرى، فأنت تدمر شيئا ما لم يتم تدميره بعد.

هذا لا علاقة له ب GTKBuilder أو الحاجيات المحمولة التي ترميزها يدويا، لكنني أظن أنني أفتقد شيئا لأنني لا أعرف لماذا تحتاج إلى توصيل شيء إلى GTKWindow :: تدمير.

نصائح أخرى

يستخدم gtk.main_quit().

def on_destroy (النفس): gtk.main_quit ()
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top