Я довольно плохо знаком с программированием Python и абсолютно плохо знаком с межплатформенным зданием GUI (только предыдущий опыт GUI через Visual Basic и Java). Я написал некоторый код Python к данным экранного царапанья из веб-сайта, и теперь я хочу создать GUI, который будет находиться в строке меню Mac OS X, и в панели задач Окна (т.е. системный лоток).
Самая полезная общая страница на перекрестных-plaform графический интерфейсах пользователя Python для меня была этим (несмотря на его графический интерфейсы пользователя Окна признака имени). И некоторые stackoverflow вопросы пригодились также (особенно этот и принятый ответ этого о разделении GUI и кода cli). Я думаю, что пойду или для wxPython или для QT, потому что я хочу, чтобы GUI выглядел максимально собственным.
Однако, поскольку я сказал, что довольно простой GUI будет главным образом живой в панели задач/строке меню. Это должно влиять на мое решение?
См. Этот ответ SO о том, как реализовать функциональность панели задач Windows / панели меню OS X в wxPython.
Вот пример для PyQt. У меня это работает на MacOS X; На других платформах не пробовал. Обратите внимание, что класс QSystemTrayIcon
вызовет исключения, если у него нет значка - я взял svg RSS-канала из сообщества Wiki для своего 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