4

我正在使用 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。

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

4

3 回答 3

1

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

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

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

带单独盒子的空地

于 2014-08-09T19:40:13.927 回答
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

于 2012-04-24T20:03:21.740 回答
1

也许有点小技巧,但您可以使用带有隐藏标签和边框的笔记本。

于 2012-07-08T03:02:00.843 回答