7

我对 Python 编程相当陌生,对跨平台 GUI 构建完全陌生(只有以前的 GUI 经验是通过 Visual Basic 和 Java)。我已经编写了一些 python 代码来从网站上抓取数据,现在我想构建一个 GUI ,它将驻留在 Mac OS X 菜单栏和 Window 的任务栏(即系统托盘)中。

对我来说,跨平台 Python GUI 最有用的通用页面是这个(尽管它的名称指示 Window GUIs)。并且一些 stackoverflow 问题也很有用(尤其是这个问题,以及这个关于拆分 GUI 和 cli 代码的公认答案)。我想我会选择wxPythonQT,因为我希望 GUI 看起来尽可能原生。

然而,正如我所说,相当简单的 GUI 将主要存在于任务栏/菜单栏中。这会影响我的决定吗?

4

2 回答 2

10

这是 PyQt 的一个示例。这适用于我在 MacOS X 上;我没有在其他平台上尝试过。请注意,如果QSystemTrayIcon该类没有图标,它将引发异常——我从 Wiki commons为我的RSS 提要 svgicon.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
于 2010-06-29T05:46:33.940 回答
2

请参阅有关如何在 wxPython 中完成 Windows 系统托盘/OS X 菜单栏功能的相关 SO 答案。

于 2010-06-23T19:30:26.170 回答