gpt4 book ai didi

python - PyQt5 线程、信号和槽。连接错误

转载 作者:行者123 更新时间:2023-12-03 12:58:14 25 4
gpt4 key购买 nike

我是 PyQt5 的新手,我似乎无法连接我的 pyqtSignal 和 pyqtSlot。错误“TypeError:connect() 在 worker.newIcon[object] 和 updateIcon() 之间失败”弹出。任何人都可以指导我走上正确的道路吗?

from PyQt5.QtWidgets import QApplication, QSystemTrayIcon, QAction, QMenu
from PyQt5.QtGui import QIcon
from PyQt5.QtCore import QObject, QThread, pyqtSignal, pyqtSlot


class worker(QThread):
newIcon = pyqtSignal(object)

def run(self):
while True:
self.newIcon.emit(QIcon("shield-off.png"))
QThread.msleep(1000)


class systemTray():
def start_tray(self):
self.app = QApplication([])
self.app.setQuitOnLastWindowClosed(False)

icon = QIcon("shield-on.png")
self.tray = QSystemTrayIcon()
self.tray.setIcon(icon)
self.tray.setVisible(True)

self.menu = QMenu()
self.quit = QAction("Exit")
self.quit.triggered.connect(self.app.quit)
self.menu.addAction(self.quit)
self.tray.setContextMenu(self.menu)

self.thread = QThread()
self.worker = worker()
self.worker.moveToThread(self.thread)
self.worker.newIcon.connect(self.updateIcon)
self.thread.started.connect(self.worker.run)
self.thread.start()

# Run tray
self.app.exec_()

@pyqtSlot(object)
def updateIcon(self, icon):
self.tray.setIcon(icon)


if __name__ == "__main__":
be_tray = systemTray()
be_tray.start_tray()

最佳答案

pyqtSlot装饰器旨在用于 QObject子类,否则将无法正常工作。
因此,解决方案非常简单,因为您只需要从 QObject 继承:

class systemTray(QObject):
def start_tray(self):
# ...
另一方面,使用 pyqtSlot装饰器很少需要,仅用于特定情况(请参阅 this related answer 。在您的情况下,它似乎没有必要。
此外,由于您已经从 QThread 继承子类,您可以使用它自己的 start() , 不使用 moveToThread()在一个新的。

关于python - PyQt5 线程、信号和槽。连接错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65917212/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com