Python 设计和更改GTK接口的最佳方法是什么?

Python 设计和更改GTK接口的最佳方法是什么?,python,user-interface,gtk,glade,gtk3,Python,User Interface,Gtk,Glade,Gtk3,我正在使用GTK3和Glade设计一个python程序。它需要根据用户需要构建的内容更改界面 第一个界面类似于: ____________________________________________________ | Label one | Text entry one | Save object button | | Label two | Text entry two | | __________________________________

我正在使用GTK3和Glade设计一个python程序。它需要根据用户需要构建的内容更改界面

第一个界面类似于:

____________________________________________________
| Label one | Text entry one |  Save object button |
| Label two | Text entry two |                     |
____________________________________________________
它位于设置为垂直的Gtk.Box()内的顶层窗口中,其中Gtk.Grid()作为框一侧的标签和文本项,以及框部分的“保存对象”按钮。(实际上,我的界面要复杂得多,表中有更多的标签、文本条目、切换按钮、组合框等)。如果你想看的话,它在

如果用户需要构建另一个对象,它将如下所示:

________________________________________________________
| Label three | Text entry three |  Save object button |
| Label four  | Text entry four  |                     |
________________________________________________________
关于如何实施变更,有哪些建议

我曾想过跟踪标签一两和条目一两,然后隐藏它们并显示其他内容,但这会弄乱格式。如果需要切换回来,我会删除每个小部件并重新构建。这是一项艰巨的工作。由于我在使用Glade,所以在我考虑删除Gtk.Box()并为其他接口需求重新创建它时,很难创建一个单独的“区域”,但使用Glade似乎是禁止的


我对任何和所有选项都持开放态度。

组合自定义小部件

class ObjectOneSettings(Gtk.Grid):
    def __init__(self):
        Gtk.Grid.__init__(self)
        self.label_one = Gtk.Label('Label One')
        self.label_two = Gtk.Label('Label Two')
        self.entry_one = Gtk.Entry()
        self.entry_two = Gtk.Entry()
        self.attach(self.label_one, 0, 0, 1, 1)
        self.attach(self.label_two, 0, 1, 1, 1)
        self.attach(self.entry_one, 1, 0, 1, 1)
        self.attach(self.entry_two, 1, 1, 1, 1)

然后,当您需要更改窗口时,您可以销毁您的
ObjectOneSettings
小部件,并将其替换为
ObjectTwoSettings
小部件。

可能有点麻烦,但您可以使用带有隐藏选项卡和边框的笔记本。

如果您使用Glade,我可以想出两种方法

第一个是根据需要在python代码中动态更改Gtk.label和Gtk.Entry的标签

第二个是在Glade中创建一个不在主窗口内的单独Gtk.Box,并在需要时添加它(首先从窗口中删除另一个)。这看起来像这样:


这是我考虑的一种方式(我考虑的是函数而不是类,但想法是一样的),我担心破坏网格可能不会删除子窗口小部件,从而导致大量内存占用和重复的接口切换。我也在考虑在另一个Gtk.Box容器中做一个grid1.show()/grid2.hide()游戏,该容器有两个网格,一个显示,另一个隐藏,并在这两个网格之间切换(实际上还有第三种状态,但一旦我决定了总体方向,我会添加)。谢谢,因为它让我觉得我不是在“愚蠢地”思考