Python - 跨平台GUI库的封装器?
我看过关于 python - Pygtk VS Pyqt VS WxPython VS Tkinter 的讨论,我的问题稍微有点不同。
比如说,我在使用Ubuntu Gnome,系统默认并没有安装python-qt;所以如果我想用一个python-qt的应用程序,就得自己下载python-qt(还有qt库);我想在KDE(或其他)桌面环境下也可能会遇到类似的情况……
其实,我经常需要制作一个非常简单的图形界面(GUI),而且我希望这个界面能在任何有Python的地方都能运行……不过,如果用户已经安装了一些这些库,那我觉得,为什么不直接用它们呢?对于复杂的情况,显然一个包罗万象的解决方案是不现实的(毕竟这些库都是跨平台的)——但是对于简单的事情,比如下面的“你好,世界”例子,或许已经有现成的解决方案?
和下面的例子相比,我想象中的解决方案可能是这样的(伪代码):
...
appgui = getCrossPlatformGUI()
mw = appgui.getMainWindow()
button = appgui.getButton(args)
appgui.connect(button, args)
appgui.show(button)
...
……在Linux上,getCrossPlatformGUI()
首先会查找 python-qt
,如果没有找到,就查找 python-gtk
,然后是 wxWindows
,最后是 tkInter
(在Windows上可能顺序不同等等)——然后返回系统中找到的库的窗口/应用程序,所有情况下默认使用 tkInter
(据我了解,这个库在Python中是自带的)。
非常感谢大家的回答,
祝好!
hello-pyqt.py
(,
)
#!/usr/bin/env python
# http://en.wikibooks.org/wiki/Python_Programming/PyQt4#Hello.2C_world.21
import sys
from PyQt4 import Qt, QtCore
def sayHello():
print "Hello, World!"
#####
a = Qt.QApplication(sys.argv)
hellobutton = Qt.QPushButton("Say 'Hello world!'", None)
a.connect(hellobutton, Qt.SIGNAL("clicked()"), sayHello)
hellobutton.clicked.connect(QtCore.QCoreApplication.instance().quit)
hellobutton.show()
a.exec_()
hello-pygtk.py
(,
)
#!/usr/bin/env python
# http://www.pygtk.org/pygtk2tutorial/examples/helloworld.py
import pygtk
pygtk.require('2.0')
import gtk
# This is a callback function. The data arguments are ignored
# in this example. More on callbacks below.
def sayHello(widget, data=None):
print "Hello, World!"
def destroy(widget, data=None):
gtk.main_quit()
#####
window = gtk.Window(gtk.WINDOW_TOPLEVEL)
window.connect("destroy", destroy)
hellobutton = gtk.Button("Say 'Hello world!'")
hellobutton.connect("clicked", sayHello, None)
hellobutton.connect_object("clicked", gtk.Widget.destroy, window)
window.add(hellobutton)
hellobutton.show()
window.show()
gtk.main()
1 个回答
有一个叫做wxWidgets的库,就是为了实现这个目的而创建的;其中“wx”代表Windows和X。你可以在他们的历史页面上找到更多信息。它的Python绑定叫做wxPython,想必你也知道。
现在看来,它似乎又变成了一个比较复杂的图形界面库,但其实它“只是”把本地的GTK/Qt/Windows控件进行了封装。