GTK 命名堆栈子项
我在用PyGobject的时候,使用了一个叫Gtk.Stack的组件,但我找不到任何关于如何使用它的“教程”。所以我想,每个Gtk.Stack里的元素应该都有一个名字或者标签。
于是我创建了一些元素,并通过以下代码把它们连接到这个堆栈上:
add_named(element_to_add_to_stack, "Element_tag")
第一个元素连接上去了,并且成功显示出来了。但是当我用以下代码把另一个元素设置为可见时:
set_visible_child_name("Element_tag")
什么也没发生。然后我查看一下这个堆栈里有哪些元素:
stack.get_visible_child()
结果返回的是
None
这是什么情况?我使用Gtk.Stack的方式是不是错了?
编辑:
def main_content(self):
right_box = Gtk.Box(orientation=Gtk.Orientation.VERTICAL)
self.stack = Gtk.Stack()
self.stack.get_style_context().add_class("main-container")
self.stack.props.margin = 20
self.stack.add_named(self.gen_page1(), "page1")
self.stack.add_named(self.gen_page2(), "page2")
self.stack.add_named(self.gen_page3(), "page3")
#self.stack.set_visible_child_name("page2")
#self.stack.set_visible_child_full("page2", 1)
print((self.stack.get_visible_child()))
right_box.pack_start(self.stack, True, True, 0)
return right_box
1 个回答
3
子部件需要是可见的(就像 Widget.get_visible()
所说的)才能被称为“可见的子部件”。在你这段代码的这个时刻并不是这样(虽然当窗口真正显示出来时,它会正常工作),但是如果你在把子部件添加到堆栈之前,先执行 my_child_widget.set_visible (True)
,那么 get_visible_child()
就应该能正常工作了。
其实这设计并不是很好,因为 set_visible_child*
函数在出错时不会给出任何提示……