在Linux中使用Python创建GUI界面

14

一个快速的问题。

我正在使用Linux系统,并且想尝试用Python编写图形用户界面(GUI)程序。我听说过Qt、GTK+和PyGTK,但是我不知道它们具体是什么及其之间的区别。

它们在不同的桌面环境(DEs)例如GNOME、KDE、XFCE等方面工作是否有所不同?是否存在像 Microsoft Visual Studio(用于C#、C、Visual Basic等语言)那样允许您创建GUI的IDE呢?

或者说,我应该使用Python之外的其他语言来制作GUI应用程序吗?

5个回答

14

你的第一步应该是访问http://wiki.python.org/moin/GuiProgramming

一些工具包在一个环境中的集成效果比另一个环境中要好。例如PyQt、PyKDE(和全新的PySide)在KDE环境下表现更好,而GTK版本(包括WX-widgets)则更适合于GNOME/XFCE桌面。

你应该考虑目标环境,可以选择基本的可移植GUI套件,或者更深入地集成到你的DE中,比如使用集成密码管理器和配置文件解析器,这些都是在特定的DE中集成的,如KDE或GNOME。

你还应该考虑你的选择所决定的依赖关系以及基本DE默认提供的内容。例如,在KDE 3.X分支中,PyKDE有一组非常复杂的依赖关系,而在4.X分支中,plasma绑定使得Python GUI编程的依赖关系不再是一个问题。

有几个IDE工具,不同的完整性和成熟度水平。最好的方法是尝试其中一个或多个,看哪个最适合你的需求。


4
哇,这里确实有很多框架。我该如何找出最适合我的那个呢?请问您有什么建议吗? - Iceland_jack
2
@Baldur,你的主要平台是什么?对于Gnome、GTK(或者wx,如果你想要合理的跨平台能力到Windows和在较小程度上的Mac);对于KDE或其他窗口管理器,Qt(也给你出色的跨平台能力);对于仅限于Mac,PyObj和Cocoa;对于仅限于Windows,我建议使用IronPython(和Windows Forms...或者最新和最伟大的.NET GUI提供的任何其他东西;-)。 - Alex Martelli
我想我的主要平台应该是GNOME,所以我应该使用GTK吗?GTK能够与Python一起使用还是必须使用PyGTK?我有点困惑。 - Iceland_jack
3
GTK本身是用C语言编写的,所以单独使用Python是无法使用它的;您需要一组“绑定”——将GTK转换为“Python语言”的库。PyGTK就是这个库。 - David Z

5
我建议不要使用其他语言来为Python创建GUI界面。
我曾经使用过wxwidgets,它是WX的Python绑定,一个跨平台开发系统。它非常易学且功能强大。但是wxwidgets的问题在于它不是默认安装的,所以你的用户需要在每个他们希望运行你的应用程序的平台上安装它。了解更多信息,请访问http://wxwidgets.org/
如果你想让人们无需安装任何其他东西就能使用你的程序,请使用Tkinter,这是与Python一起提供的GUI系统。
我建议不要使用GTK或KDE的Python绑定,除非你已经熟悉这些系统。它们也需要下载,并且似乎没有像wxwidgets那样被广泛采用。

2
每个桌面环境都使用特定的工具包来构建其组件。例如,KDE使用Qt,而GNOME则使用Gtk。
您所使用的工具包取决于您要针对哪种类型的桌面环境,如果您想针对广泛的桌面环境,则应使用适用于许多桌面环境的工具包,如Wx widgets,它可以在Linux、Mac OS和Windows上运行。对于构建简单的GUI应用程序,可以使用Tkinter。

Tkinter 在很多桌面环境上都能够使用吗?既然 Wx 工具包几乎在所有桌面环境上都能够使用,为什么 GNOME 使用 Gtk 而 KDE 使用 Qt 呢?它们的表现是否有任何区别? - Iceland_jack
1
因为Wx很丑;-) 但说真的,我认为Qt在编程易用性和视觉外观的结合方面很难被超越。但每个人都有自己的看法。 - David Z
3
有人认为B比A更好,有人认为D比A和B都好,但是因为D试图“适用于所有”,所以它比A和B更复杂。最后,一些人坚持选择A或B,一些人喜欢D,还有一些人发现E比A、B和D都更好。现在你有四个选择:A、B、D或E :) - Parthan

1

0

使用PyGTK。与工具包同样重要的是其基础,使用PyGTK还需使用GLib,以及它的文件系统抽象(Python模块gio),这对于Linux桌面非常重要,还有高级跨桌面功能,例如glib.get_user_data_dir()以及其他应用程序框架工具,和GObject及其属性和信号模型。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接