如何清除QTableView

时间:2013-03-25 12:03:11

标签: pyqt4 qtableview

我有一个QTableView。我正在使用QtSql.QSqlQuery查询数据库中的数据。

SQL = 'SELECT * FROM table1'
Query = QtSql.QSqlQuery(database)
Query.prepare(SQL)
Query.exec_()

model = QtSql.QSqlTableModel()
model.setTable('Table')
model.setQuery(Query)

proxy = QtGui.QSortFilterProxyModel()
proxy.setSourceModel(model)

QTableView.setModel(proxy)

查询结果显示在QTableView中,一切正常。 我的问题是当我更改导致SQL返回0记录的Query语句时,我需要清除QTableView

中的数据和单元格

我尝试使用QTableView.clear()清除单元格中的数据,留下空行和列。我怎样才能完全清除QTAbleView

3 个答案:

答案 0 :(得分:3)

我对清算数据的研究工作正常。

我使用了proxy.deleteLater()

希望有人能够受益于遇到同样情况的人

答案 1 :(得分:1)

由于 QTableView 的限制,我在这种情况下更喜欢使用的是一种解决方法

在我自己的个人程序中,我决定隐藏 QTableView 的行和列,使其看起来好像设置为默认值和空白。这样做的原因是,如果删除小部件,则需要替换它,这也会重置对象的所有属性。从理论上讲,这可能会迫使您在每次需要将 QTableView 显示为空白或清除时重新分配 QTableView 的所有属性。除了删除小部件之外,这个建议的选项可以通过两个简单的循环来完成,当您刷新表格并想要再次显示值时,只需再次执行两个简单的循环即可完成工作。

有多种方法可以填充 QTableView,但无论使用哪种方法,您只需要遍历表格的行和列。下面是我使用的方法,基于从 QtCore.QAbstractTableModel 继承的类,因此当我调用 dataFrame 时,它返回 QTableView 数据的 Pandas 数据框。

如果你需要隐藏表格:

for _row in range(len(yourQTableView.model().dataFrame.index)):
    yourQTableView.hideRow(_row)

for _col, col_name in enumerate(yourQTableView.model().dataFrame.columns):
    yourQTableView.hideColumn(_col)

如果需要显示表格:

for _row in range(len(yourQTableView.model().dataFrame.index)):
    yourQTableView.showRow(_row)

for _col, col_name in enumerate(yourQTableView.model().dataFrame.columns):
    yourQTableView.showColumn(_col)

对我来说,这是最简单的方法,可以得到我想要的结果。我想不出为什么这种方法不会比完全删除小部件更受欢迎。

答案 2 :(得分:0)

在c ++中,有一个QAbstractItemView的重置函数。 你可以说

yourTableView.reset();