2017-02-14 1 views
0

私はKDEシステム上で動作するコードを持っています。 Unity(Ubuntu 16.04 LTS)では、このコードは予期しない結果を生成します。ユニティの 結果: wrong result on UnityPythonとQsystemTrayアプリケーション

バスと同じコードはKDEのシステム上で良い結果を生成します。 Link to a good result 質問:同じコードがユニティで動作しないのはなぜ? とコード:

import sys 
from PyQt4 import QtGui 


class SystemTrayIcon(QtGui.QSystemTrayIcon): 
    def __init__(self, icon, parent=None): 
     QtGui.QSystemTrayIcon.__init__(self, icon, parent) 
     menu = QtGui.QMenu(parent) 

     edit = QtGui.QLineEdit(parent) 
     edit.setText("Tekstas kuris turi būti atsiradęs čia") 

     hl = QtGui.QVBoxLayout(parent) 
     hl.addWidget(QtGui.QLabel("Testuojame")) 
     hl.addWidget(edit) 

     w = QtGui.QWidget(parent) 
     w.setLayout(hl) 

     wa = QtGui.QWidgetAction(parent) 
     wa.setDefaultWidget(w) 
     menu.addAction(wa) 

     exitAction = menu.addAction("Blabla") 
     exitAction = menu.addAction("Blabla 2") 

     self.setContextMenu(menu) 


def main(): 
    app = QtGui.QApplication(sys.argv) 

    w = QtGui.QWidget() 
    trayIcon = SystemTrayIcon(QtGui.QIcon("icons/close.png"), w) 

    trayIcon.show() 
    sys.exit(app.exec_()) 


if __name__ == '__main__': 
    main() 

答えて

0

私はKDEの5.26.0(Qtの5.6.1、Ubuntuの16.10)で同じ動作を参照してください、defaultWidgetは、コンテキストメニューでの唯一の(空)iconTextが示されていませんQWidgetActionが表示されます。コンテキストメニューの表示方法は、最終的にトレイ(使用されているデスクトップ環境に固有のトレイ)によって制御されます。

これを有効にするには、コンテキストメニューではなく、アクティブ化時にメニューをポップアップメニューとして表示できます。違いは、右クリックではなく左クリックでアクティブになり、ネイティブトレイのコンテキストメニューと異なる場合があることです。

あなたの例では、次のようになります。

import sys 
from PyQt4 import QtGui 

class SystemTrayIcon(QtGui.QSystemTrayIcon): 
    def __init__(self, icon, parent=None): 
     QtGui.QSystemTrayIcon.__init__(self, icon, parent) 

     self.menu = menu = QtGui.QMenu() 
     edit = QtGui.QLineEdit() 
     edit.setText("Tekstas kuris turi būti atsiradęs čia") 

     w = QtGui.QWidget() 
     hl = QtGui.QVBoxLayout() 
     w.setLayout(hl) 
     hl.addWidget(QtGui.QLabel("Testuojame")) 
     hl.addWidget(edit) 

     wa = QtGui.QWidgetAction(menu) 
     wa.setDefaultWidget(w) 
     menu.addAction(wa) 

     exitAction = menu.addAction("Blabla") 
     exitAction = menu.addAction("Blabla 2") 

     self.activated.connect(self.showPopupMenu) 

    def showPopupMenu(self, reason): 
     if reason == QtGui.QSystemTrayIcon.Trigger: 
      self.menu.popup(QtGui.QCursor.pos()) 



def main(): 
    app = QtGui.QApplication(sys.argv) 
    trayIcon = SystemTrayIcon(QtGui.QIcon("icons/close.png")) 
    trayIcon.show() 
    sys.exit(app.exec_()) 


if __name__ == '__main__': 
    main() 
+0

オムが、ハズレ。私はSystemtrayアイコンの近くでこのコードをちょうど灰色の長方形で使用しています。 – user27359

関連する問題