Glade还是没有林间空地:使用PyGtk的最佳方式是什么?

时间:2008-09-07 04:00:41

标签: python gtk pygtk glade gtk2

我已经学习python一段时间了,但取得了一些成功。我甚至设法使用PyGtk + Glade创建了一个或两个(简单)程序。

问题是:我不确定使用GTK和python的最佳方法是使用Glade构建接口。

我想知道我们中间经验更丰富的人(请记住,我只是一个初学者)可以指出使用Glade的好处和注意事项,而不是在代码本身中创建所有内容(假设学习正确的gtk绑定)不会是一个问题)。

11 个答案:

答案 0 :(得分:20)

我想说这取决于:如果你发现使用Glade你可以构建你想要或需要制作的应用程序,那绝对没问题。但是,如果您真的想了解GTK的工作原理或者您有一些非标准的UI要求,那么您将 深入研究GTK内部(这并不复杂)。

就个人而言,当我需要一些功能或定制时,我通常需要大约5分钟才能进入富客户端,而Glade或Stetic等设计师根本不可能这样做。也许这只是我。尽管如此,使用图形工具引导窗口设计对我来说仍然很有用。

我的建议:如果使用GTK创建富客户将成为您工作/业余爱好的重要组成部分,那么也要学习GTK,因为有一天需要编写该代码。

P.S。我个人认为Stetic在设计工作方面优于Glade,如果有点不稳定的话。

答案 1 :(得分:12)

使用GtkBuilder而不是Glade,它已集成到Gtk本身而不是单独的库中。

Glade的主要好处是创建界面要容易得多。连接信号处理程序要多做一些工作,但我从来没有觉得那么重要。

答案 2 :(得分:5)

Glade对于创建界面非常有用,这意味着您可以轻松更改GUI而无需进行太多编码。您会发现,如果您想做任何有用的事情(例如构建树视图),您将不得不熟悉GTK文档的各个部分 - 在实践中找到一个好的教程/示例。

答案 3 :(得分:5)

我开始使用林间空地,但很快就开始使用代码完成所有操作。 Glade非常适合简单的事情,当你学习GTK如何组织小部件(如何打包等等)时,它是很好的。但是,在代码中构建所有内容,您可以获得更大的灵活性。另外,你没有林间空地依赖性。

答案 4 :(得分:4)

我通常从Glade开始,直到我找不到我需要的功能,例如创建一个向导。只要我使用Glade提供的标准小部件,就没有理由手工编写GUI。

我对Glade格式化代码的方式越熟悉,我的手工编码就越好。更不用说,使用Glade制作底层框架真的很容易,所以你不必担心所有的初始化。

答案 5 :(得分:4)

如果你正在编写一个传统的GUI应用程序,它重复使用GTK +的许多标准组件(按钮,标签,容器等),我个人会选择Glade + Kiwi(构建GTK + GUI应用程序的便利框架)。

使用Glade的最大好处是它大大减少了布局/打包代码。这是一个非常简单的示例,它已经显示了手动布局GUI的问题(不使用任何辅助函数):

container = gtk.HBox()
label = gtk.Label(str="test")
container.add(label)

有关更多示例,请选择look here。即使您正在编写复杂的自定义窗口小部件,也可以始终在Glade中创建占位符,并在实例化后替换它。

Glade团队现在推出新版本的设计师(3.6.0)应该不会太长。这个新版本将添加对GtkBuilder的支持,后者取代了libglade(将Glade XML文件转换为小部件树的实际库)。新的Glade设计器再次添加了对在Python中定义目录(小部件集)的支持,因此您可以轻松添加自己的自定义小部件。

答案 6 :(得分:2)

我建议使用Glade进行快速开发,但不能用于学习。为什么?因为有时候你需要调整一些小部件才能按照你想要的方式工作,如果你真的不了解/理解每个小部件的属性属性,那么你就会遇到麻烦。

答案 7 :(得分:1)

对于快速简单的屏幕,我使用Glade。但是对于任何需要更高级别控制的东西,我会根据实际需要创建一个自定义类(这很重要,因为它很容易被一般化带走)。

使用特定于应用程序的特定类,我可以从一个地方快速更改应用程序的外观。而是使用CSS来保持网站的一致性。

答案 8 :(得分:1)

我个人建议编码而不是使用Glade。我还在学习python和pyGtk,但我会说用手工编写UI让我对如何在幕后工作有很多见解。

一旦你学会了我会说要给林间空地或其他UI设计师一试,但绝对要先学会如何以“硬”方式去做。

答案 9 :(得分:1)

首先,开始明白这一点。

您将使用GTK。这是一个巨大的C库,建于1993年,采用了20世纪70年代编码风格的最佳传统。它是为了帮助实现GIMP而建立的,这是一个Photoshop竞争对手想要的用户界面错误的传奇。典型的gui字段可能具有四十个或更多参数,大多数是重复的,具有吸气剂和设定器。会有痛苦。

GTK本身使用GObject在C中管理一个完整的动态类型系统。这使得调试成为一种特殊的乐趣,需要手动遍历指向充满具有隐式继承的通用参数列表的方法的指针数组。当你最不期望它时,你也会跳过Pango库,例如,当页面很小时,使用Pango常量来表示省略号在标签中的位置。期待更多的痛苦。

到目前为止,您可能发誓要将所有GTK交互包装在特定于您的应用程序的模型 - 视图 - 控制器体系结构中。这很好。

使用Glade,或gtkBuilder或Stetic,将有助于将40个参数的巨大耦合问题转化为函数。 Glade提供了一个基本的GUI构建器,用于将组件拖放到一起。参数和继承的参数有些分离。 Glade的输出是.glade XML文件,然后您将读入该文件,将您的回调(“信号处理程序”)附加到具有相同名称的函数,并查询或更新该XML的内存版本以获取您随后使用pyGTK的小部件操纵。格莱德本身是一个吱吱作响,维护得不好。

使用pyGTK为您构建GUI提供了令人烦恼的细粒度控制。这将是详细的复制粘贴代码。每个属性都是一个单独的函数调用。属性setter不返回任何内容,因此链接调用是不可能的。通常,您的IDE只会提供有关函数含义的最小帮助,您将不断引用DevHelp或其他工具。

人们几乎可以期待GTK GUI失败。

答案 10 :(得分:-1)

您可以使用glade-2进行设计,并使用glade2py.py生成纯pygtk代码, 它使用pygtkcompat来支持gtk3