2010-06-23 77 views
6

我對Python編程還很陌生,對於跨平臺的GUI構建也是全新的(只有以前的GUI經驗是通過visual basic和Java)。 我已經寫了一些python代碼來屏幕抓取網站的數據,現在我想構建一個GUI ,它將駐留在Mac OS X菜單欄中,並位於Window的任務欄(即系統托盤)中。適用於任務欄(Win)和菜單欄(mac)功能的跨平臺Python GUI?

對我來說,最有用的跨平臺Python GUI的一般頁面是this one(儘管其名稱指示窗口GUI)。還有一些stackoverflow問題也很有用(尤其是this onethe accepted answer of this one關於拆分GUI和cli代碼)。 我想我會去wxPythonQT,因爲我希望GUI看起來儘可能原生。

但是,正如我所說,相當簡單的GUI將主要生活在任務欄/菜單欄中。 這應該影響我的決定嗎?

回答

10

下面是PyQt的一個例子。這在MacOS X上適用於我;我沒有在其他平臺上嘗試過。請注意,如果QSystemTrayIcon課程沒有圖標,它將引發異常 - 我爲icon.svg抓取了RSS feed svg from Wiki commons(但您可以直接給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