如何清除QTableView

问题描述 投票:0回答:5

我有一个 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
语句导致
Query
返回 0 条记录时,我需要清除
QTableView

中的数据和单元格

我尝试使用

QTableView.clear()
它清除单元格中的数据,留下空行和列。怎样才能彻底清除
QTAbleView

pyqt4 qtableview
5个回答
3
投票

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

yourTableView.reset();


2
投票

我对清除数据的研究奏效了。

我用过

proxy.deleteLater()

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


1
投票

由于 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)

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


0
投票
self.table_view.model().setRowCount(0)

0
投票

我使用了以下方法:

self.table_view.setModel(NULL)

© www.soinside.com 2019 - 2024. All rights reserved.