【问题标题】:How to clear QTableView如何清除 QTableView
【发布时间】:2013-03-25 12:03:10
【问题描述】:

我有一个 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 中。 我的问题是当我更改导致Query 返回0 条记录的SQL 语句时,我需要清除QTableView 中的数据和单元格

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

【问题讨论】:

    标签: pyqt4 qtableview


    【解决方案1】:

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

    我用过proxy.deleteLater()

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

    【讨论】:

    • 这会删除小部件,并且不是从 QTableView 清除数据的最佳方法
    【解决方案2】:

    在 c++ 中有一个用于 QAbstractItemView 的重置功能。 你可以说

    yourTableView.reset();

    【讨论】:

    • 这不会清除数据。
    【解决方案3】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-13
      • 2018-06-15
      相关资源
      最近更新 更多