我可以在代码中添加元素,以便稍后通过Gtk.Builder()获取它吗?

时间:2014-04-10 11:27:21

标签: python gtk pygobject gobject gtkbuilder

我使用Python 3 + PyGObjects + Gtk.Builder 我有一些窗户,我用林间空地创造的东西:

builder = Gtk.Builder()
builder.add_from_file("main.ui")

我创建了一些小部件并添加它们(我在窗口中看到它):

switch = Gtk.Switch()
switch.set_name('test')

hBox = Gtk.HBox()
hBox.pack_start(switch, True, True, 10)

window = builder.get_object("MainWindow")
window.add(hBox)

在程序的另一部分,我无法访问"切换",但必须" builder"。我试试:

switch = builder.get_object('test')
switch_active = switch.get_active()

但收到错误:

AttributeError: 'NoneType' object has no attribute 'get_active'

我如何从" builder"?

获得它

2 个答案:

答案 0 :(得分:0)

你不能。 Builder只能为你提供在ui文件中定义的对象。

您应该修改您的程序,以便您可以访问需要获取有效值的部分中的switch

答案 1 :(得分:0)

另一种选择是在ui文件中命名容器,使用get_object在代码中检索容器,并将新窗口小部件设置为其子窗口。然后,稍后检索容器并询问其子容器。

另一个选择:如果你需要在运行时修改一个小部件的一个属性(很常见,例如,对于组合框和树视图),而不是在代码中创建它并在以后添加它,你最好从它检索它你改变了它。您可以特别更改visibility属性,因此可以根据上下文显示它。

总之,在使用GtkBuilder时,必须在代码中创建小部件非常罕见。即使是贡献的小部件,您也可以创建目录。如果您不想一次加载所有屏幕,也可以使用许多GtkBuilder。