Python - 跨平台GUI库的封装器?

3 投票
1 回答
1396 浏览
提问于 2025-04-17 05:41

我看过关于 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 (hello-pyqt-ubuntu.png, hello-pyqt-opensuse.png)

#!/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 (hello-pygtk-ubuntu.png, hello-pygtk-opensuse.png)

#!/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 个回答

6

有一个叫做wxWidgets的库,就是为了实现这个目的而创建的;其中“wx”代表Windows和X。你可以在他们的历史页面上找到更多信息。它的Python绑定叫做wxPython,想必你也知道。

现在看来,它似乎又变成了一个比较复杂的图形界面库,但其实它“只是”把本地的GTK/Qt/Windows控件进行了封装。

撰写回答