我有一个类似于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'))
现在我只想避免在任何地方点击以刷新它。