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

事情是:我不确定将 GTK 与 python 结合使用的最佳方法是否是使用 Glade 构建接口。

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

有帮助吗?

解决方案

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

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

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

附:我个人发现 斯泰蒂奇 在设计工作上优于 Glade,只是稍微不稳定一点。

其他提示

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

Glade 的主要好处是创建界面非常非常容易。连接信号处理程序需要更多工作,但我从未觉得这很重要。

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

我一开始使用的是glade,但很快就转向用代码来完成所有事情。Glade 适合处理简单的事情,当您学习 GTK 如何组织小部件(如何打包等)时,它也很有用。然而,在代码中构建所有内容,您拥有更大的灵活性。另外,你没有空地依赖性。

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

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

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

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

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

如需更多示例,请参阅 看这里. 。即使您正在编写一个复杂的自定义小部件,您始终可以在 Glade 中创建一个占位符并在实例化后替换它。

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

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

对于快速简单的屏幕,我使用 Glade。但对于任何需要更精细控制级别的东西,我都会为我实际需要的内容创建一个自定义类(这很重要,因为很容易被概括所迷惑)。

通过瘦身应用程序特定类,我可以从一个地方快速更改应用程序的外观和感觉。就像使用 CSS 来保持网站的一致性一样。

就我个人而言,我建议将其编码出来,而不是使用 Glade。我仍在学习 python 和 pyGtk,但我想说的是,手工编写 UI 让我对底层的工作原理有了很多了解。

一旦你学会了,我会说尝试一下 Glade 或其他 UI 设计师,但一定要先学会如何以“困难”的方式去做。

首先,开始正确看待这一点。

您将使用 GTK。这是一个巨大的 C 库,建于 1993 年,采用了 20 世纪 70 年代编码风格的最佳传统。它是为了帮助实现 GIMP 而构建的,GIMP 是 Photoshop 的竞争对手,但其用户界面却存在着传奇般的错误。一个典型的 GUI 字段可能有四十个或更多参数,大部分是重复的,有 getter 和 setter。会有疼痛。

GTK 本身使用 GObject 管理 C 语言中的完整动态类型系统。这使得调试变得特别有趣,需要手动遍历指向充满通用参数列表和隐式继承的方法的指针数组。您还将在您最意想不到的时候跳过 Pango 库,例如,当页面很小时,使用 Pango 常量来表示省略号在标签中的位置。期待更多的痛苦。

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

使用 Glade、gtkBuilder 或 Stetic 将有助于解决函数四十个参数的巨大耦合问题。Glade 提供了一个基本的 GUI 构建器来将组件拖放到一起。参数和继承参数在某种程度上是分开的。Glade 的输出是 .glade XML 文件,然后您将读入该文件,将回调(“信号处理程序”)附加到同名函数,并查询或更新该 XML 的内存版本以获取随后使用 pyGTK 的小部件操纵。林间空地本身已经破破烂烂,而且维护得不好。

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

人们几乎会认为 GTK GUI 注定会失败。

您可以使用glade-2来设计,并使用 glade2py.py 要生成纯Pygtk代码,它使用PygtkCompat支持GTK3

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top