2012-04-23 132 views
4

我正在设计一个使用GTK3和Glade的python程序。它需要根据用户需要构建的内容更改界面。什么是设计和更改GTK界面的最佳方式?

第一接口是一样的东西:

____________________________________________________ 
| 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 |      | 
________________________________________________________ 

什么是关于如何实施变革一些建议吗?

我曾想过记录标签1-2和条目1-2,并隐藏它们并显示其他条目,但它与格式混淆。如果需要切换回去,我已经搞砸了删除每个小部件并重建。这是很多工作。由于我使用的是Glade,因此很难创建一个单独的“区域”,因为我想删除Gtk.Box()并为其他接口需要重新创建它,但这似乎使用Glade时非常不便。

我接受任何和所有选项。

回答

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部件替换它,当你需要改变窗口。

+0

这是一个办法,我想(我的想法是功能,而不是类,但同样的想法),是担心破坏电网可能不会删除导致子部件带有重复接口开关的大内存占用空间。我也在考虑在另一个Gtk.Box容器内部做一个grid1.show()/ grid2.hide()游戏,它有两个网格,一个显示,另一个隐藏并在两者之间切换(实际上有第三个状态为好吧,但我会补充说,一旦我决定整体方向)。谢谢,因为它可以帮助我认为我不会“愚蠢”。 – narnie 2012-04-25 01:31:06

1

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

1

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

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

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

glade with separate box

相关问题