2010-06-23 1 views
6

Я довольно новичок в программировании на Python и совершенно новый для кросс-платформенного графического интерфейса (только предыдущий опыт графического интерфейса - через визуальные базовые и Java). Я написал код python для скрининга данных с веб-сайта, и теперь я хочу создать графический интерфейс пользователя , который будет находиться в строке меню Mac OS X и в панели задач Window (то есть в системном трее).Кросс-платформенный графический интерфейс Python, подходящий для функциональности панели задач (Win) и menubar (mac)?

Самая полезная общая страница для графических интерфейсов Python для кросс-пластин для меня была this one (несмотря на то, что она указала на графические интерфейсы Window GUI). И некоторые проблемы с stackoverflow также оказались полезными (особенно this one и the accepted answer of this one о разделении графического интерфейса и кода cli). Я думаю, что пойдет либо на wxPython, либо QT, потому что я хочу, чтобы графический интерфейс выглядел как можно более родным.

Однако, как я уже сказал, довольно простой графический интерфейс будет в основном находиться в панели задач/меню. Должно ли это повлиять на мое решение?

ответ

2

См. Это related SO answer о том, как выполнить системный лоток Windows/функциональность панели меню OS X в wxPython.

10

Вот пример для PyQt. Это работает для меня на MacOS X; Я не пробовал это на других платформах. Обратите внимание, что класс QSystemTrayIcon будет генерировать исключения, если у него нет значка. Я схватил RSS feed svg from Wiki commons за мой 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