ما هي خطوات التحويل من استخدام libglade إلى gtkbuilder؟ (بيثون)
-
09-09-2019 - |
سؤال
لدي مشروع صغير يستخدم 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 وحذفها يدويا للقضاء على التحذيرات التي تسببها.