Pyside2 QSystemTrayIcon, левый клик / правый разные действия
Я хотел бы знать, как сделать в Python/Pyside2:
Создайте QSystemTrayIcon с пользовательским значком, в котором:
Если я нажимаю на него левую кнопку, я делаю свое собственное действие (в моем случае открываю внешний диалог, но достаточно просто напечатать "test"...). Меню не должно отображаться...
Если я щелкну на нем правой кнопкой, появится пользовательское контекстное меню с действием выхода, чтобы закрыть программу.
1 ответ
Для щелчка левой кнопкой мыши вы должны использовать активированный сигнал, используя причину триггера. В случае щелчка правой кнопкой мыши вам нужно только создать контекстное меню:
from PySide2 import QtCore, QtGui, QtWidgets
class Window(QtWidgets.QDialog):
def __init__(self, parent=None):
super(Window, self).__init__(parent)
self.trayIcon = QtWidgets.QSystemTrayIcon(self)
self.trayIconMenu = QtWidgets.QMenu(self)
self.quitAction = QtWidgets.QAction("&Quit", self,
triggered=QtWidgets.QApplication.instance().quit)
self.trayIconMenu.addAction(self.quitAction)
self.trayIcon.setContextMenu(self.trayIconMenu)
self.trayIcon.show()
# set icon
icon = self.style().standardIcon(QtWidgets.QStyle.SP_MessageBoxInformation)
# icon = QtGui.QIcon("/path/of/icon")
self.trayIcon.setIcon(icon)
self.trayIcon.activated.connect(self.iconActivated)
@QtCore.Slot(QtWidgets.QSystemTrayIcon.ActivationReason)
def iconActivated(self, reason):
if reason in (QtWidgets.QSystemTrayIcon.Trigger, QtWidgets.QSystemTrayIcon.DoubleClick):
self.resize(640, 480)
self.show()
if __name__ == '__main__':
import sys
app = QtWidgets.QApplication.instance()
if app is None:
app = QtWidgets.QApplication(sys.argv)
if not QtWidgets.QSystemTrayIcon.isSystemTrayAvailable():
QtWidgets.QMessageBox.critical(None, "Systray",
"I couldn't detect any system tray on this system.")
sys.exit(1)
QtWidgets.QApplication.setQuitOnLastWindowClosed(False)
window = Window()
sys.exit(app.exec_())