如何更新/刷新QTableView

时间:2014-04-28 00:29:34

标签: python pyqt qtableview

我有一个类似于this

的QTableView集

init 中正常工作,正确显示元素,但如果我更改数据,我找不到更新的方法,我想知道如何发送dataChange信号,我试过了在MyTableModel中创建一个类方法来处理dataChange.emit,但我不太了解它。

Class Main
    [...]  #general stuff(init,other objects...)
    self.table = QtGui.QTableView()


    def table_data(*args):
        self.table_data = getdatasomewhereelse()
        return self.table_data


    self.table_model = MyTableModel(table_data(), ['col1', 'col2', self)
    self.table.setModel(self.table_model)


    def delentry():
        dosomethingwithdata()  #i'm using a pickle file to store it, so I have to go back and forth in it


    self.btn_delentry = QtGui.QPushButton()
    self.btn_delentry.clicked.connect(delentry)


class MyTableModel(QtCore.QAbstractTableModel):
    [...] # I'm using the same code for this Class as http://toolz.googlecode.com/svn-history/r107/trunk/GCAlign/tableSortTest.py


if __name__ == "__main__":
    app = QtGui.QApplication(sys.argv)
    try:
        data = pickle.load(open("data.p", "rb"))
        main = Main()
        main.show()
        sys.exit(app.exec_())
    finally:
        pickle.dump(acc, open("data.p", "wb"))

我已经设法更改数据并在表格中进行更新,但是有一个讨厌的位,用户必须点击任意位置才能看到结果。

这就是我的所作所为。

调用函数similatar设置为 init MyTableModel,如下所示:

def __call__(self, datain, headerdata, QObject,parent=None, *args):
    QtCore.QAbstractTableModel.__init__(self, parent)
    self.arraydata = datain
    self.headerdata = headerdata

在按钮中创建了一个自定义connect()信号,如下所示:

self.btn_delentry.connect(self.btn_delentry,QtCore.SIGNAL('Ping')
                          ,lambda:self.table_model(
                           self.table_data(), ['name', 'balance'],self.table_name,self))

并将delen()中的信号设置为emit(),如下所示:

self.btn_delentry.emit(QtCore.SIGNAL('Ping'))

现在我只想避免在任何地方点击以刷新它。

0 个答案:

没有答案