在QAbstractTableModel中没有发出pyqt信号

时间:2018-02-22 12:59:56

标签: python pyqt qtableview qabstractitemmodel

因此,我正在编写应用程序并使用storageQTableView来显示我的数据。在每一行中,复选框放在第一列中,当选中或取消选中时,我希望将{pyqtsignal QAbstractTableModel发送到CheckBoxValue。但似乎没有调用MyTable中的连接函数self.checkboxchecked。虽然我曾经多次使用pyqtSignal而没有任何问题,但是我已经被困在这里并且无法解决它。

感谢大家花时间照顾我的问题!

MyTable

1 个答案:

答案 0 :(得分:1)

在你的情况下,你已经在MyTable构造函数中创建了一个table_model,并且使用该对象建立了连接,但是稍后在update_model方法中你已经创建了一个新模型,因此之前的模型已被删除,并且它的连接也是如此

def update_model(self):
    self.table_model = MyTableModel(self, self.dataList, self.header)
    self.table_view.setModel(self.table_model)
    self.table_model.CheckBoxValue.connect(self.checkboxchecked)
    self.table_view.update()

虽然我更喜欢更新模型,而不是为它创建新模型,但我会创建一个更新数据的方法:

class MyTableModel(QAbstractTableModel):
    """
    keep the method names
    they are an integral part of the model
    """

    CheckBoxValue = pyqtSignal(bool)
    def __init__(self, parent, mylist, header, *args):
        QAbstractTableModel.__init__(self, parent, *args)
        self.mylist = mylist
        self.header = header

    def update_model(self,  mylist, header):
        self.beginResetModel()
        self.mylist = mylist
        self.header = header
        self.endResetModel()

    [...]

并在表的update_model中:

class MyTable(QWidget):
    [...]
    def update_model(self):
        self.table_model.update_model(self.dataList, self.header)