pyqtSignal 发出多种类型

问题描述 投票:0回答:1

我有一个信号:

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 创建。

python pyqt5 qthread
1个回答
0
投票

尝试一下:

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())

© www.soinside.com 2019 - 2024. All rights reserved.