0

I use Python 3+PyGObjects+Gtk.Builder I have some window, what I create from glade:

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

I create some widgets and add them(i see it in window):

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)

At another part of program I do not have access to "switch", but have to "builder". I try:

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

But receive error:

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

How I can get it from "builder"?

4

2 回答 2

0

另一种选择是在 ui 文件中命名您的容器,使用 get_object 在代码中检索容器并将您的新小部件设置为其子项。然后,稍后检索容器并要求它的孩子。

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

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

于 2014-04-11T18:39:28.563 回答
0

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

您应该修改您的程序,以便您可以访问switch需要获取活动值的部分。

于 2014-04-10T12:55:02.103 回答