簡體   English   中英

PyQt5:如何在不同的類中使用Slot + Signal?

[英]PyQt5: How to use Slot+Signal in different classes?

我必須說這是一個非常初學者的問題。 我已經閱讀並嘗試了很多,但仍然不明白Slot+Signal如何工作的。

在我的下面的代碼中,我想在單擊按鈕時將三個變量從MyApp類傳輸到Worker類。

代碼不起作用。 誰能幫助我糾正它,因此我可以基本了解Slot + Signal。

from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
from PyQt5.QtCore import *
import sys


class Worker(QObject):
    def __init__(self, parent=None):
        super(Worker, self).__init__(parent)

    @pyqtSlot(str, str, int)
    def onJob(self, strA, strB, int1):
        print(strA, strB, int1)
        for i in range(40):
            print(i)


class MyApp(QWidget):
    def __init__(self, parent= None):
        super(MyApp, self).__init__(parent)
        self.initUI()

    def initUI(self):
        self.btn = QPushButton("start", self)
        self.btn.clicked.connect(self.start)
        self.show()

    def start(self):
        otherClass = Worker()
        self.signal = pyqtSignal(str, str, int)
        self.signal.emit("foo", "baz", 10)
        self.signal.connect(otherClass.onJob)

if __name__ == '__main__':
    app = QApplication(sys.argv)
    window = MyApp()
    window.show()
    sys.exit(app.exec_())

非常感謝!

您的代碼有以下錯誤:

  • 不能在類的任何方法中聲明信號,它必須與方法處於同一級別。

  • 如果我在將信號連接到任何插槽之前發送信號,則沒有人會收聽​​信息,因此數據將丟失,即數據的傳輸幾乎是瞬時的。

在下面的代碼中,我已經實現了必要的修改以使其工作:

class MyApp(QWidget):
    signal = pyqtSignal(str, str, int)
    def __init__(self, parent= None):
        super(MyApp, self).__init__(parent)
        self.initUI()

    def initUI(self):
        self.btn = QPushButton("start", self)
        self.btn.clicked.connect(self.start)
        self.show()

    def start(self):
        otherClass = Worker()
        self.signal.connect(otherClass.onJob)
        self.signal.emit("foo", "baz", 10)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM