Graphic User Interface FAQ

What platform-independent GUI toolkits exist for Python?

根据你所瞄准的平台,有几个。其中一些还没有移植到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更成熟,但如果你想编写专有应用程序,你必须从Riverbank Computing购买一个PyQt许可证。PySide适用于所有应用。

Qt 4.5向上是根据LGPL许可证授权;也可从The Qt Company获得商业许可证。

Gtk+

Python的GObject introspection bindings允许您编写GTK + 3应用程序。还有一个Python GTK + 3教程

The older PyGtk bindings for the Gtk+ 2 toolkit have been implemented by James Henstridge; see <http://www.pygtk.org>.

FLTK

可以从PyFLTK项目获得FLTK工具包的Python绑定,这是一个简单但功能强大且成熟的跨平台窗口系统。

FOX

可以使用FOX工具包的包装器,名为FXpyFOX支持Unix版本和Windows。

OpenGL

对于OpenGL绑定,请参阅PyOpenGL

What platform-specific GUI toolkits exist for Python?

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

由Mark Hammond提供的Pythonwin包括Microsoft Foundation Classes的接口和Python编程环境,这些环境主要使用MFC类编写。

Tkinter questions

How do I freeze Tkinter applications?

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

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

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

Build Tix with SAM enabled, perform the appropriate call to Tclsam_init(), etc. 在Python的Modules/tkappinit.c内,并链接到libtclsam和libtksam(你可能还包括Tix库)。

Can I have Tk events handled while waiting for I/O?

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

I can’t get key bindings to work in Tkinter: why?

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

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