如何在pygtk应用程序中获取(无子项)“标签”

1 投票
2 回答
718 浏览
提问于 2025-04-17 02:45

我在开发一个pygtk应用时遇到了一个问题,我想要在应用里添加标签页,类似于gedit那样,但不想为每个标签页添加单独的内容。

我发现了一个叫做gtk.Notebook的东西,但这个东西要求我为每个标签页都放一个小部件,这让我觉得不太方便。

我的想法是,我只有一个小部件,但我希望根据选中的标签页来更新这个小部件的内容。

有没有什么建议可以实现这个功能呢?目前我想到的办法是为每个标签页添加一些看不见的小部件,然后连接到select-page信号。请问我可以用什么小部件作为看不见的小部件,或者有没有更好的方法来实现我的目标?

2 个回答

0

你可以为每个标签页设置全局小部件,这样在选择标签页时就能方便地访问它们。

    self.notebook.append_page(self.rightBox,    gtk.Label("Orders"))

然后连接到“切换页面”的信号。

    self.notebook.connect("switch-page", self.pageSelected)

接着:

def pageSelected(self, notebook, page, pagenum):
    name = notebook.get_tab_label(notebook.get_nth_page(pagenum))

现在你有了一个“name”,它表示当前选中的页面的标签。只需测试一下(如果 name == "Orders" ...)就可以进行交互了。

希望这些对你有帮助!

2

隐形小部件的想法是可行的。不过,不是用 gtk.Invisible(这个会崩溃),而是用 gtk.HBox() 或其他看起来空空的东西。

self.notebook.append_page(gtk.HBox(), gtk.Label("title"))

现在,如果我想在标签页里面显示一些东西,我可以用重新父级的方法把小部件移动到当前的标签页,像这样。

class Tab(gtk.HBox):
    def __init__(self, child):
        self.child = child

self.notebook.append_page(Tab(myWidget), gtk.Label("title"))

def pageSelected(self, notebook, page, pagenum):
    box = notebook.get_nth_page(pagenum)
    box.child.reparent(box)

撰写回答