我有一个信号:
auto_dj_start = pyqtSignal(dict,str,dict,str)
有时,当玩家列表为空时,我想向所有参数发出
None
,而不是字典和字符串。
但是发生了这个错误:
Traceback (most recent call last):
File "C:\Users\chris\Documents\My Projects\papinhio-player\src\python+\main-window\../..\python+\main-window\page-4\player-list.py", line 721, in run
self.auto_dj_start.emit(data["play"],data["play-sequence"],data["load"],data["load-sequence"])
TypeError: Player_List_Emitter.auto_dj_start[dict, str, dict, str].emit(): argument 1 has unexpected type 'NoneType'
所以我能做的就是发出空字典和空字符串。
还有其他选择吗?
也许如果我创建一个新类型为 dict_or_None 为 dict 或 None 并将其传递给 pyqtSignal 创建。
尝试一下:
import sys
import random
from PyQt5.Qt import *
class MainWindow(QWidget):
# auto_dj_start = pyqtSignal(dict, str, dict, str)
auto_dj_start = pyqtSignal(object) # 1
def __init__(self):
super().__init__()
self.textBrowser = QTextBrowser()
self.button = QPushButton('Click me')
self.button.clicked.connect(self.onClick)
self.layout = QVBoxLayout(self)
self.layout.addWidget(self.textBrowser)
self.layout.addWidget(self.button)
self.auto_dj_start.connect(self.onStart) # 2
def onClick(self):
_data = [
[dict, str, dict, str],
None,
]
object = random.choice(_data)
self.auto_dj_start.emit(object) # 3
def onStart(self, obj): # 4
self.textBrowser.append(str(obj))
if __name__ == "__main__":
app = QApplication(sys.argv)
w = MainWindow()
w.show()
sys.exit(app.exec())