GTK 命名堆栈子项

0 投票
1 回答
744 浏览
提问于 2025-04-17 20:48

我在用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* 函数在出错时不会给出任何提示……

撰写回答