【发布时间】:2017-10-13 08:51:54
【问题描述】:
我想发出定义的信号:
finished = pyqtSignal(dict)
# other place it's connected to function:
def finised(self, dict_result):
我称它为 self.finished.emit({"bk": {}}) 并且它有效。
现在我用self.finished.emit({2: {}})调用它,它不起作用!!
Traceback(最近一次调用最后一次): 运行中的文件“/home/sylwek/workspace/t2-pv/Manager.py”,第 452 行 self.finished.emit({2: {}}) TypeError: TesterManager.finished[dict].emit(): argument 1 has unexpected type 'dict'
正常吗?我可以将{2: {}} 更改为{'2': {}},但我想了解原因并确保不会有其他意外!
我使用 PyQt 5.8.2-2 和 python 3.6.1-1
编辑(添加工作示例):
from PyQt5 import QtCore, QtWidgets
from PyQt5.QtWidgets import QApplication
class Emiterer(QtCore.QThread):
f = QtCore.pyqtSignal(dict)
def __init__(self):
super(Emiterer, self).__init__()
def run(self):
self.f.emit({"2": {}})
# self.f.emit({2: {}}) < == this don't work!
class Main(QtWidgets.QMainWindow):
def __init__(self):
super(Main, self).__init__()
self.e = Emiterer()
self.e.f.connect(self.finised)
self.e.start()
def finised(self, r_dict):
print(r_dict)
if __name__ == '__main__':
import sys
app = QApplication(sys.argv)
m = Main()
m.show()
sys.exit(app.exec_())
【问题讨论】:
-
令人惊讶的是,它适用于带有 PyQt4 的 Python-2.7。如果它不适用于 PyQt5,我认为这是一个错误。
-
它可能在过去有效.. 但我不确定.. 我可以在哪里提供有关此错误的信息? sb else 可以确认与我有相同的错误吗?
-
最近有人在 PyQt 邮件列表 FWIW 上 reported the same issue。
标签: python python-3.x qt pyqt pyqt5