设计和更改GTK界面的最佳方法是什么?

时间:2012-04-23 23:25:09

标签: python user-interface gtk glade gtk3

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

第一个界面如下:

____________________________________________________
| Label one | Text entry one |  Save object button |
| Label two | Text entry two |                     |
____________________________________________________

位于Gtk.Box()内的顶级窗口中,设置为垂直,Gtk.Grid()作为框一侧的标签和文本条目,以及保存对象按钮的部分框。 (我的界面实际上要复杂得多,因为表格中有更多标签,文本条目,切换按钮,组合框等)。如果您想看到它,它位于http://sourceforge.net/projects/createlauncher

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

________________________________________________________
| Label three | Text entry three |  Save object button |
| Label four  | Text entry four  |                     |
________________________________________________________

有关如何实施变更的一些建议?

我已经想过要跟踪标签一到二和进入二 - 二,隐藏它们并展示其他标签,但它与格式化有关。我已经搞砸了删除每个小部件并重建,如果需要切换回来。这是很多工作。由于我正在使用Glade,因此我很难创建一个单独的“区域”,因为我考虑删除Gtk.Box()并将其重新设置为其他界面需要,但使用Glade似乎令人望而却步。

我愿意接受任何和所有选择。

3 个答案:

答案 0 :(得分:1)

复合自定义小部件?

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窗口小部件。

答案 1 :(得分:1)

也许有点像黑客,但你可以使用带有隐藏标签和边框的笔记本。

答案 2 :(得分:1)

如果你使用Glade,我可以想到两种方法。

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

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

glade with separate box