Graphic User Interface FAQ¶
内容
What platform-independent GUI toolkits exist for Python?¶
根据你所瞄准的平台,有几个。其中一些还没有移植到Python 3。至少已知Tkinter和Qt是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工具包绑定(使用PyQt或PySide)和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>.
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选项)。