图形用户界面常见问题

通用图形用户界面问题

对于Python,存在哪些独立于平台的GUI工具包?

根据您的目标平台,有几个平台。其中一些还没有移植到python 3。至少 TkinterQt 已知与python 3兼容。

Tkinter

标准的python构建包括到tcl/tk小部件集的面向对象接口,称为 tkinter . 这可能是最容易安装的(因为它随大多数 binary distributions 和使用。有关tk的更多信息,包括指向源的指针,请参见 Tcl/Tk home page .Tcl/Tk完全可移植到Mac OS X、Windows和Unix平台。

wxWidgets

WXWIDGET(HTTPS://www. WxWigGETS.Org)是一个免费的、可移植的GUI类库,用C++编写,它在许多平台上提供了本地的外观和感觉,包括Windows、Mac OS X、GTK、X11,它们都被列为当前稳定的目标。语言绑定可用于多种语言,包括python、perl、ruby等。

wxPython 是wxwidgets的python绑定。虽然它通常稍微落后于官方的wxwidgets版本,但它还通过纯Python扩展提供了许多功能,而这些扩展在其他语言绑定中不可用。有一个活跃的wxpython用户和开发人员社区。

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

Qt

有可用于qt工具包的绑定(使用 PyQtPySide )和KDE( PyKDE4 )Pyqt目前比Pyside成熟,但您必须从购买Pyqt许可证 Riverbank Computing 如果你想写专有的应用程序。Pyside对所有应用程序都是免费的。

Qt4.5以上是根据LGPL许可证获得许可的;此外,商业许可证可从 The Qt Company .

Gtk+

这个 GObject introspection bindings 对于python,允许您编写gtk+3应用程序。还有一个 Python GTK+ 3 Tutorial .

的旧pygtk绑定 Gtk+ 2 toolkit 已由James Henstridge实施;请参见<http://www.pygtk.org>。

Kivy

Kivy 是一个跨平台的GUI库,支持桌面操作系统(Windows、MacOS、Linux)和移动设备(Android、iOS)。它是用python和cython编写的,可以使用一系列的窗口化后端。

Kivy是免费的开源软件,根据MIT许可证分发。

FLTK

的python绑定 the FLTK toolkit 是一个简单但功能强大且成熟的跨平台窗口系统,可从 the PyFLTK project .

OpenGL

有关OpenGL绑定,请参见 PyOpenGL .

针对Python存在哪些平台特定的GUI工具包?

通过安装 PyObjc Objective-C bridge ,python程序可以使用mac os x的cocoa库。

Pythonwin Mark Hammond包括微软基础类和Python编程环境的接口,Python编程环境主要是使用MFC类在Python中编写的。

Tkinter 问题

如何冻结tkinter应用程序?

冻结是创建独立应用程序的工具。冻结tkinter应用程序时,应用程序不会真正独立,因为应用程序仍然需要tcl和tk库。

一种解决方案是将应用程序与tcl和tk库一起发送,并在运行时使用 TCL_LIBRARYTK_LIBRARY 环境变量。

要获得真正独立的应用程序,组成库的TCL脚本也必须集成到应用程序中。一个支持的工具是sam(独立模块),它是tix发行版(http://tix.sourceforge.net/)的一部分。

在启用sam的情况下生成tix,对 Tclsam_init() 等,在 Python 的 Modules/tkappinit.c ,并与libtclsam和libtksam链接(也可以包括tix库)。

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

在Windows以外的平台上,是的,而且您甚至不需要线程!但是你需要重新构造一下你的I/O代码。tk与xt等价 XtAddInput() 调用,它允许您注册一个回调函数,当文件描述符上可以进行I/O时,将从tk mainloop调用该函数。见 文件处理程序 .

我不能让密钥绑定在Tkinter中使用:为什么?

经常听到的抱怨是,事件处理程序绑定到 bind() 即使按了适当的键,也无法处理方法。

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