ما هي خطوات التحويل من استخدام libglade إلى gtkbuilder؟ (بيثون)

StackOverflow https://stackoverflow.com/questions/748872

سؤال

لدي مشروع صغير يستخدم libglade واستخدام ما يلي لتحميل ملف XML:

self.gladefile = "sdm.glade"
self.wTree = gtk.glade.XML(self.gladefile) 
self.window = self.wTree.get_widget("MainWindow")
if (self.window):
    self.window.connect("destroy", gtk.main_quit)
dic = { "on_button1_clicked" : self.button1_clicked, 
        "on_MainWindow_destroy" : gtk.main_quit}
self.wTree.signal_autoconnect(dic)

بعد تحويل مشروعي في Glade، ما هي التغييرات الهيكلية التي أحتاج إليها؟ أنا على أوبونتو 9.04.

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

المحلول

تحتاج إلى استخدام gtk.Builder في حين أن. يمكن لهذه الفئة تحميل أي عدد من ملفات UI، لذلك تحتاج إلى إضافتها يدويا، إما كملفات أو كسلاسل:

self.uifile = "sdm.ui"
self.wTree = gtk.Builder()
self.wTree.add_from_file(self.uifile)

بدلا من get_widget, ، فقط استخدم get_object على فئة البناء:

self.window = self.wTree.get_object("MainWindow")
if self.window:
    self.window.connect("destroy", gtk.main_quit)

لتوصيل الإشارات، فقط استخدم connect_signals, ، والتي تأخذ أيضا القاموس:

dic = { "on_button1_clicked" : self.button1_clicked, 
    "on_MainWindow_destroy" : gtk.main_quit}
self.wTree.connect_signals(dic)

اعتاد أن يكون الحال (على الأقل في GTK + 2.12، لست متأكدا مما إذا كان لا يزال هو نفسه) الذي يمكنك الاتصال به connect_signals فقط مرة واحدة فقط، لن يتم توصيل أي إشارات غير متصلة أثناء الاحتجاج الأول أبدا. كان هذا مختلفا في Glade، لذلك كن حذرا إذا اعتمدت على هذه الميزة من قبل.

نصائح أخرى

إجابة Torsten صحيحة، ولكن غير مكتملة قليلا، لذلك بروح http://xkcd.com/979/ هنا هو الإجراء الذي استقرته مؤخرا بعد الكثير من المحاكمة والخطأ:

افتح yada.glade في مصمم واجهة Glade. انتقل إلى تحرير>> مشروع وتغيير نوع المشروع إلى GTKBuilder وتأكد من أنه يستهدف أحدث إصدار (2.24 اعتبارا من هذه الكتابة). احفظ الملف، تأكد من أنه يحفظ بتنسيق GTKBuilder، وقم بتغيير الاسم من Yada.Glade إلى YADA.UI

افتح yada.py وتغيير التعليمات البرمجية التالية:

gladefile = relativize_filename(os.path.join("glade", "yada.glade"))
self.wTree = gtk.glade.XML(gladefile, self.windowname)

ل:

uifile = relativize_filename(os.path.join("glade", "yada.ui"))
self.wTree = gtk.Builder()
self.wTree.add_from_file(uifile)

وبالمثل تغيير جميع مثيلات self.wTree.get_widget(...) ل self.wTree.get_object(...)

يتغيرون self.wTree.signal_autoconnect(dic) ل self.wTree.connect_signals(dic)

إذا كان رمزك يعتمد على الاسم المعين القطعة في مصمم الواجهة، والتغيير widget.get_name() ل gtk.Buildable.get_name(widget). widget.get_name() الآن فقط إرجاع نوع القطعة. تحرير: تحتاج أيضا إلى التغيير widget.set_name('my_widget') ل gtk.Buildable.set_name(widget, 'my_widget').

حذف import gtk.glade

لقد وجدت العديد من الإشارات غير المستخدمة المحددة في ملف YADA.UI XML، اضطررت إلى فتح ملف XML وحذفها يدويا للقضاء على التحذيرات التي تسببها.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top