Межплатформенный Python GUI, подходящий для панели задач (Победа) и строка меню (Mac) функциональность?

Я довольно плохо знаком с программированием Python и абсолютно плохо знаком с межплатформенным зданием GUI (только предыдущий опыт GUI через Visual Basic и Java). Я написал некоторый код Python к данным экранного царапанья из веб-сайта, и теперь я хочу создать GUI, который будет находиться в строке меню Mac OS X, и в панели задач Окна (т.е. системный лоток).

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

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

6
задан Community 23 May 2017 в 11:53
поделиться

2 ответа

См. Этот ответ SO о том, как реализовать функциональность панели задач Windows / панели меню OS X в wxPython.

2
ответ дан 9 December 2019 в 20:39
поделиться

Вот пример для 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
10
ответ дан 9 December 2019 в 20:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: