2018年11月11日 星期日

Pyqt5, Signal有分Unbound and Bound Signals

A bound signal has connect()disconnect() and emit() methods that implement the associated functionality.

New signals should only be defined in sub-classes of QObject.They must be part of the class definition and cannot be dynamically added as class attributes after the class has been defined.

==>
在PyQt5中,
class QTd(QtCore.QThread):
    msig = QtCore.pyqtSignal(str, str)
    psig = QtCore.pyqtSignal(QtWidgets.QPushButton, bool)

    def __init__(self, fi, table, pbutton, sbox, parent = None):
        super().__init__(parent)
        self.fi = fi
        self.table = table
        self.pbutton = pbutton
        self.sbox = sbox
        self.msig.connect(self.showmbox)
        self.psig.connect(self.setpb)

==>
msig和psig是class variable, 
self.fi, self.table, self.pbutton, self.sbox是instance variable,
在此msig和psig是bound signal, 
(<class 'PyQt5.QtCore.pyqtBoundSignal'>)
如果宣告在class QTd的__init__底下,變成
self.msig = QtCore.pyqtSignal(str, str)
self.psig = QtCore.pyqtSignal(QtWidgets.QPushButton, bool)

那麼self.msig和self.psig就變成unbound signal, 
(<class 'PyQt5.QtCore.pyqtSignal'>)
unbound signal就沒有connect() method了。

詳參:

沒有留言:

張貼留言