我想知道如何在python / Pyside2中进行操作:
使用自定义图标创建QSystemTrayIcon,其中:
如果我单击鼠标左键,则会执行自定义操作(只需打印“按下左键”)。不应显示任何菜单...
如果单击鼠标右键,将显示一个上下文菜单,上面带有退出操作,仅用于关闭程序。
在MacOS上,也许不在win或Linux下,菜单仅在按下鼠标时打开 ...这就是为什么需要左右键区分的原因否则,两个动作都将通过左键和右键单击来完成。请参阅此处的注释:On macOS... since the menu opens on mouse press
我需要帮助,只需在以下代码中实现左键和右键单击的区别:
from PySide2 import QtWidgets
import sys
class SystrayLauncher(object):
def __init__(self):
w = QtWidgets.QWidget() #just to get the style(), haven't seen other way
icon = w.style().standardIcon(QtWidgets.QStyle.SP_MessageBoxInformation)
self.tray = QtWidgets.QSystemTrayIcon()
self.tray.setIcon(icon)
self.tray.setVisible(True)
self.tray.activated.connect(self.customAction)
# I JUST WANT TO SEE THE MENU WHEN RIGHT CLICK...
self.trayIconMenu = QtWidgets.QMenu()
self.quitAction = QtWidgets.QAction("&Quit", None, triggered=QtWidgets.QApplication.instance().quit)
self.trayIconMenu.addAction(self.quitAction)
self.tray.setContextMenu(self.trayIconMenu)
# JUST WANNA USE THE ACTION WITH LEFT CLICK
def customAction(self, signal):
print "left click pressed"
if __name__ == "__main__":
app = QtWidgets.QApplication(sys.argv)
app.setQuitOnLastWindowClosed(False)
sl = SystrayLauncher()
sys.exit(app.exec_())
有人可以帮我吗?
您可以区分点击“原因”并决定要怎么做。因此,您将需要添加如下功能:
def right_or_left_click(reason):
if reason == QSystemTrayIcon.ActivationReason.Trigger:
print("Left-click detected")
elif reason == QSystemTrayIcon.ActivationReason.Context:
print("Right-click detected")
elif reason == QSystemTrayIcon.ActivationReason.MiddleClick:
print("Middle-click detected")
else:
print("Unknown reason")
self.tray.activated.connect(right_or_left_click)
然后,您可以在单击鼠标左键或单击鼠标中键时调用所需的功能。右键单击被您的上下文菜单占据:)