适合任务栏(Win)和菜单栏(mac)的跨平台Python GUI?

7 投票
2 回答
3473 浏览
提问于 2025-04-16 00:20

我刚开始学习Python编程,对跨平台的图形用户界面(GUI)构建完全是个新手(之前只用过Visual Basic和Java做过一些GUI)。我写了一些Python代码,从一个网站上抓取数据,现在我想做一个图形界面,这个界面要能在Mac OS X的菜单栏和Windows的任务栏(也就是系统托盘)里显示

对我来说,关于跨平台Python GUI的最有用的页面是这个(尽管它的名字提到的是Windows GUI)。还有一些StackOverflow上的问题也很有帮助(特别是这个,以及这个的被接受答案,讨论了如何把GUI和命令行代码分开)。我觉得我会选择wxPython或者QT,因为我希望这个GUI看起来尽可能像本地应用。

不过,正如我所说,这个相对简单的GUI主要会在任务栏/菜单栏里显示。
这会影响我的选择吗?

2 个回答

10

这里有一个关于PyQt的例子。这个在我的MacOS X上能正常工作;我没有在其他平台上试过。需要注意的是,QSystemTrayIcon这个类如果没有图标的话会报错——我从维基共享资源上下载了一个RSS图标作为我的icon.svg(不过你也可以直接给QIcon一个PNG格式的图标,这样就不需要去搞QtSvg了)。

import PyQt4
from PyQt4 import QtCore, QtGui, QtSvg

app = QtGui.QApplication([])

i = QtGui.QSystemTrayIcon()

m = QtGui.QMenu()
def quitCB():
 QtGui.QApplication.quit()
def aboutToShowCB():
 print 'about to show'
m.addAction('Quit', quitCB)
QtCore.QObject.connect(m, QtCore.SIGNAL('aboutToShow()'), aboutToShowCB)
i.setContextMenu(m)

svg = QtSvg.QSvgRenderer('icon.svg')
if not svg.isValid():
 raise RuntimeError('bad SVG')
pm = QtGui.QPixmap(16, 16)
painter = QtGui.QPainter(pm)
svg.render(painter)
icon = QtGui.QIcon(pm)
i.setIcon(icon)
i.show()

app.exec_()

del painter, pm, svg # avoid the paint device getting
del i, icon          # deleted before the painter
del app
2

可以看看这个 相关的StackOverflow回答,里面讲了如何在wxPython中实现Windows系统托盘或Mac OS X菜单栏的功能。

撰写回答