启动时带有 QTablewidget 信号的 rowCount

rowCount with signal of QTablewidget at startup

有两个 classes,第一个 class Table 与 QTableWidget 具有在启动时调用信号的功能,带有自定义信号和槽以计算行数。

自定义信号用于发出行数并将行数转换为另一个 class。

第一部分按预期工作。似乎插槽从不在另一个 class 中发出或调用函数。

class Table(QtWidgets.QWidget):
    rowCount = QtCore.pyqtSignal(int)
    def __init__(self, parent=None):
        super(Table, self).__init__(parent)
        self.tableWidget = QtWidgets.QTableWidget(0, 4)
        self.countrow()

    def countrow(self):
        count = self.tableWidget.rowCount()
        self.rowCount.emit(count)

另一个class:

class Anotherwidget(QtWidgets.QWidget):
    def __init__(self, parent=None):
        super( Anotherwidget, self).__init__()

        self.table = Table()
        self.table.rowCount.connect(self.addrow)

    @QtCore.pyqtSlot(int) 
    def addrow(self, count):
        print(count)

我哪里做错了?

问题是信号在建立连接之前发出。

一种可能的解决方案是使用 QTimer.singleShot(0, ...):

class Table(QtWidgets.QWidget):
    rowCount = QtCore.pyqtSignal(int)
    def __init__(self, parent=None):
        super(Table, self).__init__(parent)
        self.tableWidget = QtWidgets.QTableWidget(0, 4)
        QtCore.QTimer.singleShot(0, self.countrow)

    def countrow(self):
        # ...

另一种可能的选择是在连接后调用 countrow:

class Table(QtWidgets.QWidget):
    rowCount = QtCore.pyqtSignal(int)
    def __init__(self, parent=None):
        super(Table, self).__init__(parent)
        self.tableWidget = QtWidgets.QTableWidget(0, 4)

    def countrow(self):
        # ...
class Anotherwidget(QtWidgets.QWidget):
    def __init__(self, parent=None):
        super( Anotherwidget, self).__init__()

        self.table = Table()
        self.table.rowCount.connect(self.addrow)
        self.table.countrow()

    def addrow(self):
        # ...