Skip to main content

图形用户界面常见问题

Python有什么平台无关的GUI工具包?

根据你所瞄准的平台,有几个。其中一些还没有移植到Python 3。至少 TkinterQt 被认为是Python 3兼容的。

Tkinter

Python的标准构建包括面向Tcl/Tk小部件集的面向对象接口,称为 tkinter。这可能是最容易安装(因为它包括在大多数的 二元分布 的Python)和使用。有关Tk的更多信息,包括指向源的指针,请参阅 Tcl/Tk主页。 Tcl/Tk完全可移植到Mac OS X,Windows和Unix平台。

wxWidgets

wxWidgets(https://www.wxwidgets.org)是一个免费的,可移植的GUI类库,用C++编写,在许多平台上提供本地的外观和感觉,Windows,Mac OS X,GTK,X11,都列为当前稳定的目标。语言绑定可用于多种语言,包括Python,Perl,Ruby等。

wxPython(http://www.wxpython.org)是wxwidgets的Python绑定。虽然它通常落后于官方的wxWidgets版本,它还提供了许多功能通过纯Python扩展,其他语言绑定不可用。有一个活跃的wxPython用户和开发人员社区。

wxWidgets和wxPython都是免费的,开源的,具有许可证许可证的软件,允许它们在商业产品以及免费软件或共享软件中使用。

Qt

有绑定可用于Qt工具包(使用 PyQtPySide)和KDE(PyKDE4)。 PyQt目前比PySide更成熟,但如果你想编写专有应用程序,你必须从 河岸计算 购买一个PyQt许可证。 PySide适用于所有应用。

Qt 4.5以上是根据LGPL许可证授权;也可从 Qt公司 获得商业许可证。

Gtk +

Python的 GObject内省绑定 允许你编写GTK + 3应用程序。还有一个 Python GTK + 3教程

对于 Gtk + 2工具包 的较旧的PyGtk绑定已经由James Henstridge实现;见<http://www.pygtk.org>。

FLTK

用于 FLTK工具包 的Python绑定是一种简单而强大且成熟的跨平台窗口系统,可从 PyFLTK项目 获得。

狐狸

可以使用称为 FXpyFOX工具包 的包装程序。 FOX支持Unix版本和Windows。

OpenGL

有关OpenGL绑定,请参阅 PyOpenGL

Python有什么平台特定的GUI工具包?

通过安装 PyObjc Objective-C桥,Python程序可以使用Mac OS X的Cocoa库。

Pythonwin 由Mark Hammond包括Microsoft基础类的接口和Python编程环境,主要使用Python编写的MFC类。

Tkinter的问题

如何冻结Tkinter应用程序?

冻结是一种创建独立应用程序的工具。当冻结Tkinter应用程序时,应用程序将不会真正独立,因为应用程序仍然需要Tcl和Tk库。

一个解决方案是使用Tcl和Tk库运送应用程序,并在运行时使用 TCL_LIBRARYTK_LIBRARY 环境变量指向它们。

为了获得真正的独立应用程序,形成库的Tcl脚本也必须集成到应用程序中。一个支持的工具是SAM(独立模块),它是Tix分发(http://tix.sourceforge.net/)的一部分。

构建Tix与SAM启用,在Python的 Modules/tkappinit.c 中执行适当的调用 Tclsam_init() 等,并链接libtclsam和libtksam(你可能还包括Tix库)。

我可以在等待I/O时处理To事件吗?

在Windows以外的平台上,是的,你甚至不需要线程!但是你必须重新构建I/O代码。 Tk等效于Xt的 XtAddInput() 调用,它允许您注册一个回调函数,当文件描述符上可能有I/O时,它将从Tk mainloop中调用。见 文件处理程序

我不能得到密钥绑定在Tkinter工作:为什么?

一个常见的投诉是,使用 bind() 方法绑定到事件的事件处理程序即使在按下相应的键时也不会被处理。

最常见的原因是绑定应用的窗口小部件没有“键盘焦点”。查看聚焦命令的Tk文档。通常,通过单击窗口小部件来获得键盘焦点(但不是用于标签;请参阅takefocus选项)。