2010-06-23 12 views
6

Sono abbastanza nuovo per la programmazione Python e completamente nuovo per la costruzione dell'interfaccia grafica multipiattaforma (solo l'esperienza della GUI precedente è attraverso Visual Basic e Java). Ho scritto del codice Python per scansionare i dati da un sito web, e ora voglio creare una GUI che risieda nella barra dei menu di Mac OS X e nella barra delle attività di Windows (ad es. La barra delle applicazioni).GUI Python multipiattaforma adatta per le funzionalità barra delle applicazioni (Win) e menu (mac)?

La pagina generale più utile sulle interfacce grafiche Python cross-plaform per me era this one (nonostante il suo nome indica le finestre GUI). E anche alcune domande di stackoverflow sono state utili (in particolare lo this one e lo the accepted answer of this one sulla suddivisione della GUI e del codice cli). Penso che andrò per wxPython o QT perché voglio che la GUI sia il più nativa possibile.

Tuttavia, come ho già detto, la GUI abbastanza semplice vivrà principalmente nella barra delle applicazioni/barra dei menu. Questo influenzerebbe la mia decisione?

risposta

2

Vedere questo related SO answer su come eseguire la funzionalità barra di menu di Windows System tray/OS X in wxPython.

10

Ecco un esempio per PyQt. Questo funziona per me su MacOS X; Non l'ho provato su altre piattaforme. Si noti che la classe QSystemTrayIcon solleverà eccezioni se non ha un'icona - Ho afferrato il RSS feed svg from Wiki commons per il mio icon.svg (ma si può dare direttamente un codice PNG QIcon e non si scherza con).

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 
Problemi correlati