2017-05-31 84 views
2

我正在使用TrayIcon,我已经添加了一个“退出”QAction,现在,我想在TrayIcon菜单中单击退出时执行某个功能。下面是我的代码有:PyQt - 连接QAction功能

class TrayIcon(QSystemTrayIcon): 
    """ 
    Displays a system tray icon 
    """ 

    def __init__(self, interface: Interface) -> None: 
     """ 
     Constructor 
     :param interface: Interface to show when the tray icon is clicked 
     """ 
     super().__init__(QIcon(resource_filename("ezstorage.resources.img.tray_icon", "folder.png"))) 
     self.interface = interface 
     self.setVisible(True) 
     self.show() 
     self.activated.connect(self.clicked) 
     menu = QMenu() 
     action = QAction("Exit") 
     menu.addAction(action) 
     self.setContextMenu(menu) 

回答

2

这是怎么了我的菜单根据您的代码连接图标的功能:

self.menu = QMenu() 
self.action = QAction("Exit") 
self.menu.addAction(self.action) 
self.action.triggered.connect(self.my_function) 

功能self.my_function然后就不管你想有。

0
def setupTrayIcon(self, MainWindow): 
    self.tray_icon = QSystemTrayIcon() 
    self.tray_icon.setIcon(QIcon("logo.png")) 
    self.tray_icon.setToolTip("System Tray Management") 
    self.tray_icon.show() 
    self.tray_icon.tray_menu = QtWidgets.QMenu() 
def setupActions(self,MainWindow): 
    self.tray_icon.show_action = QtWidgets.QAction("Show", MainWindow) 
    self.tray_icon.quit_action = QtWidgets.QAction("Exit", MainWindow) 
    self.tray_icon.hide_action = QtWidgets.QAction("Hide", MainWindow) 
    self.tray_icon.tray_menu.addAction(self.tray_icon.show_action) 
    self.tray_icon.tray_menu.addAction(self.tray_icon.hide_action) 
    self.tray_icon.tray_menu.addAction(self.tray_icon.quit_action) 
    self.tray_icon.setContextMenu(self.tray_icon.tray_menu) 
def ConnectAction(self, MainWindow): 
    self.tray_icon.show_action.triggered.connect(self.handleShowAction) 
    self.tray_icon.hide_action.triggered.connect(self.handleTrayIconButton) 
    self.tray_icon.quit_action.triggered.connect(self.close_application) 

这显示了它如何在MainWindow类中工作。 Ps。您需要在点击操作时实施要调用的方法。在我的情况下,他们被称为(self.handleShowAction,self.handleTrayIconButton和self.close_application)。