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

标签 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。

我对所有选项持开放态度。

最佳答案

复合自定义小部件?

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

关于python - 设计和更改 GTK 界面的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10289667/

相关文章:

python - 通过 beeline 将 Hive 查询的输出结果存储在字符串中。也尝试使用 Popen 运行,但没有成功

python - 将 Pandas Dataframe 列转换为 R 因子

wcf - 如何从 MessageHeaderInfo 中获取值

c - 当我按下按钮时,如何取消选中 GTK 中的复选框?

multithreading - 多线程与引用计数 : does each thread count variables separately

c - 使用 GTK+ 和 C 时应用程序无法启动 (0xc000007b)

Python C API : Modify search path

Python:字典中 numpy 数组的高效串联

javascript - 鼠标点击对象unity 5.3 UI?

winapi - 开发具有一些图形编辑器功能的小型且快速的 GUI 应用程序的最佳组合是什么 - C++ 和(VB 或 Win32)?