PyQt5 signal and slot,pyqt5signal

來源:互聯網
上載者:User

PyQt5 signal and slot,pyqt5signal

PyQt5 的 signal 與 slot 有所改變,例如,先定義一個 ZeroSignal 類:

class ZeroSignal(QObject):    atzero = pyqtSignal(int)

使用時,一是綁定 slot 如下:

    self.zerosig = ZeroSignal()       self.zerosig.atzero[int].connect(self.countZero)

然後是找個機會發動之:

def checkZero(self):        if self.value() == 0:            self.zerosig.atzero.emit(self.value())

大約如此,完整代碼如下:

import osimport sysfrom PyQt5.QtCore import *from PyQt5.QtGui import *from PyQt5.QtWidgets import *class ZeroSignal(QObject):    atzero = pyqtSignal(int)class ZeroSpinBox(QSpinBox):    def __init__(self, parent=None):        super(ZeroSpinBox, self).__init__(parent)        self.zeros = 0        self.valueChanged[int].connect(self.checkZero)        self.zerosig = ZeroSignal()        self.zerosig.atzero[int].connect(self.countZero)    def countZero(self, v):        if v == 0:            self.zeros += 1            print(self.zeros)    def checkZero(self):        if self.value() == 0:            self.zerosig.atzero.emit(self.value())            class Form(QDialog):    def __init__(self, parent=None):        super(Form, self).__init__(parent)                dial = QDial()        dial.setNotchesVisible(True)        spin = ZeroSpinBox()        layout = QHBoxLayout()        layout.addWidget(dial)        layout.addWidget(spin)        self.setLayout(layout)        dial.valueChanged.connect(spin.setValue)        spin.valueChanged.connect(dial.setValue)        spin.valueChanged.connect(self.emitZero)        self.setWindowTitle("Sinal and Solt")                self.zerobox = spin         self.zerobox.zerosig.atzero[int].connect(self.annouce)    def emitZero(self, v):        if v == 0:            self.zerobox.zerosig.atzero.emit(self.zerobox.zeros)    def annouce(self, v):        print("zero count: %d" % v)  # print two times because add ZeroSpinBox emit oncedef run():    app = QApplication(sys.argv)    form = Form()    form.show()    app.exec_()if __name__ == '__main__':    run()

OK!

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.