2011-08-15 182 views
0

我正在寫一個PyQt systemtray腳本。它只是一個系統服務的開關。我通過這段代碼添加到QActions QMenu,我的目的是顯示正在運行的服務的綠色和停止服務紅:QApplication字體顏色

.... 
for service, started in s.services.items(): 
    action = self.menu.addAction(service) 

    if started: #It is my purpose, but obviously it doesn't work 
     action.setFontColor((0, 255, 0)) 
    else: 
     action.setFontColor((255, 0, 0)) 

    action.triggered.connect(functools.partial(self.service_clicked, service)) 
....  

的問題是,的QAction的沒有setFontColor方法:)。它有一個setFont方法,但我在QFont文檔中看不到與顏色相關的方法。它不支持富文本格式。

我發現了一個可能的解決方案here,但它對於這個簡單的操作似乎有很多工作。

有人可以建議我一個更簡單的方法嗎?

回答

1

我可以看到的唯一更簡單的方法是讓你的QAction可選(例如定義「服務處於活動狀態」應該檢查項目),然後使用Qt樣式表來獲得所需的效果。造型菜單項的

的例子可以在這裏找到:Qt Style Sheets - Customizing QMenu

1

不是你想要什麼,但你可以改變用的QAction到例如關聯的圖標一個紅色或綠色的點非常簡單:所以菜單文字不會改變顏色,但點會。

.... 
for service, started in s.services.items(): 
    action = self.menu.addAction(service) 

    if started: #It is my purpose, but obviously it doesn't work 
     action.setIcon(QIcon(":/greendot.png")) 
    else: 
     action.setIcon(QIcon(":/reddot.png")) 

    action.triggered.connect(functools.partial(self.service_clicked, service)) 
....