2012-02-18 17 views
1

私はPyqtを使用していますが、C++コードは問題ありません。私はQSystemTrayIconのメニュー項目をLinux(Ubuntu 11.10)のQTフレームワークを使って変更しようとしています。現在、私は最初に設定した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

まったく同じ問題を抱えていますが、私の場合、上記のコードは自分のアプリケーションと同じように動作しません。私はUbuntu 12.04 LTSを利用しています。 –

関連する問題