2017-02-14 55 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