我试图在PyQT5程序中单击系统托盘图标时打印文本。我尝试将PyQT5 QSystemTrayIcon激活的信号(单击系统托盘图标时发出的)连接到自定义方法,但未调用该方法。 下面是简单的例子:PyQT5 QSystemTrayIcon激活信号不起作用
import sys
from PyQt5.QtWidgets import QSystemTrayIcon, QApplication
from PyQt5.QtGui import QIcon
from PyQt5.QtCore import pyqtSlot
@pyqtSlot()
def action(signal):
print('test1')
app = QApplication(sys.argv)
icon = QSystemTrayIcon(QIcon('any_icon.png'), app)
icon.show()
icon.activated.connect(action)
#icon.activated['QSystemTrayIcon::ActivationReason'].connect(action)
#icon.pyqtConfigure(activated=action)
print(icon.receivers(icon.activated)) # to check if is connected
sys.exit(app.exec_())
在示例是信号连接到槽(其中两个注释)的3种方式。我尝试使用方法有和没有装饰@pyqtSlot()。连接不会导致错误。即使是信号接收器的打印,它也连接到1个插槽。但是,当单击系统托盘图标时,它不会执行任何操作。
问题:信号连接不正确,还是信号根本没有发出?
系统:Ubuntu 16.04,PyQT5.8。但是,由于PyQT是多平台的,所以也应该在其他系统上工作。 PS:我已阅读official PyQT5 signal/slot documentation和堆栈溢出的许多相关问题,但没有找到同样的问题。我认为最接近的一个可能与is in C++有关,但不适用于python。 任何提示将非常感激。非常感谢你! 编辑:文本中的固定拼写错误
我已经尝试过,它运行良好。我使用Arch Linux,PyQt5.8,Qt5.8和gnome作为桌面管理器。 – eyllanesc
@eyllanesc感谢您试用和详细信息。我忘记提及我有_Unbuntu_,_Unity_, 而不是_Gnome_,所以这使我进行了一些测试,我认为_Unity_上的_PyQT_存在一个错误。更多信息在我的答案下面。 –