2012-02-18 3 views
1

Pyqt를 사용하고 있지만 C++ 코드는 문제가 없습니다. 리눅스 (Ubuntu 11.10)에서 QT 프레임 워크를 사용하여 QSystemTrayIcon의 메뉴 항목을 변경하려고합니다. 현재 내가 처음에 설정 한 QMenu를을 다시 시도 :Qt QSystemTrayIcon 메뉴 항목 변경

self.tray = QSystemTrayIcon() 
m = QMenu() 
m.addAction('First') 
m.addAction('Second') 
tray.setContextMenu(m) 

내 수업 시간에이를 배치하고 클래스 변수를 트레이합니다. 난 그냥 새로운 메뉴를 설정할 수있는 트레이를 변경할 경우 업데이트 것이라고 생각했다 :

new_m = QMenu() 
new_m.addAction('First') 
new_m.addAction('Third') 
self.tray.setContextMenu(new_m) 

그러나 작동하지 않습니다 그리고 그것은 처음에 만들어진으로 트레이 메뉴는 여전히 동일합니다. 어떻게 메뉴를 재구성하여 변경할 수 있습니까?

답변

1

나는 다음과 같은 코드를 테스트하고 그것을 잘 작동하는 것 같다 :

from PyQt4.QtGui import * 
import sys 

class MainWindow(QMainWindow): 
    def __init__(self): 
    super(MainWindow, self).__init__() 

    self.tray = QSystemTrayIcon(QApplication.style().standardIcon(QStyle.SP_DriveDVDIcon), self) 
    m = QMenu() 
    m.addAction('First') 
    m.addAction('Second') 
    self.tray.setContextMenu(m) 
    self.tray.show() 

    p = QPushButton("test", self) 
    self.setCentralWidget(p) 
    p.clicked.connect(self.onClick) 

    def onClick(self): 
    new_m = QMenu() 
    new_m.addAction('First') 
    new_m.addAction('Third') 
    self.tray.setContextMenu(new_m) 

app = QApplication(sys.argv) 
w = MainWindow() 
w.show(); 
sys.exit(app.exec_()) 

는 당신에게 하나의 QSystemTrayIcon 목적이 확실합니까? 귀하의 발췌 문장에는 self.traytray이 있습니다.

+1

고마워, 나는 쟁반을 숨기고 그 다음 그것을 보여 주어야하고 그것을 위해 새로운 컨텍스트 메뉴를 설정해야했다. 어쩌면 내 설정으로 뭔가를해야 할 것입니다. – user654628

+0

똑같은 문제가 생기면, 위의 코드는 필자의 경우처럼 내 응용 프로그램에서 작동하지 않습니다. 나는 우분투 12.04 LTS에있다. –