如何在pygtk应用程序中获取(无子项)“标签”
我在开发一个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)