我使用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"?
获得它答案 0 :(得分:0)
你不能。 Builder只能为你提供在ui文件中定义的对象。
您应该修改您的程序,以便您可以访问需要获取有效值的部分中的switch
。
答案 1 :(得分:0)
另一种选择是在ui文件中命名容器,使用get_object在代码中检索容器,并将新窗口小部件设置为其子窗口。然后,稍后检索容器并询问其子容器。
另一个选择:如果你需要在运行时修改一个小部件的一个属性(很常见,例如,对于组合框和树视图),而不是在代码中创建它并在以后添加它,你最好从它检索它你改变了它。您可以特别更改visibility属性,因此可以根据上下文显示它。
总之,在使用GtkBuilder时,必须在代码中创建小部件非常罕见。即使是贡献的小部件,您也可以创建目录。如果您不想一次加载所有屏幕,也可以使用许多GtkBuilder。