从使用libglade到GtkBuilder的转换步骤是什么?(Python)

2024-04-29 18:47:12 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个小项目,它使用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转换我的项目之后,我需要做什么结构上的改变? 我在Ubuntu 9.04上。在


Tags: 项目selfgtkmainonwindowquitdic
2条回答

您需要使用gtk.Builder。此类可以加载任意数量的UI文件,因此您需要手动添加它们,可以是文件,也可以是字符串:

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

不要使用get_widget,只需在builder类上使用get_object

^{pr2}$

要连接信号,只需使用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中是不同的,所以如果您以前依赖于这个特性,请小心。在

托尔斯滕的回答是正确的,但有点不完整,因此,本着http://xkcd.com/979/的精神,我最近在反复尝试后确定了一个程序:

打开雅达·格拉德在格拉德界面设计师。转到edit->;project并将项目类型更改为GtkBuilder,并确保它针对的是最新版本(本文撰写时为2.24)。保存文件,确保它以GtkBuilder格式保存,然后从雅达·格拉德到雅达.ui在

打开雅达.py并更改以下代码:

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

收件人:

^{pr2}$

类似地,将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类型。编辑:您还需要将widget.set_name('my_widget')更改为gtk.Buildable.set_name(widget, 'my_widget')。在

删除import gtk.glade

我发现在雅达.uixml文件时,我不得不打开xml文件并手动删除它们,以消除它们引起的警告。在

相关问题 更多 >