在 PyQt 中清除 TableView

Posted

技术标签:

【中文标题】在 PyQt 中清除 TableView【英文标题】:Clear a TableView in PyQt 【发布时间】:2010-08-22 18:57:17 【问题描述】:

我正在学习如何使用 PyQt 显示数据和表格。最终,我希望有一个显示数据库内容的表格,但现在我只是掌握一些基础知识。我有一个使用 Qt Designer 和一组按钮(“创建”、“添加行”、“添加列”和“清除”)进行的基本设置(粘贴在下面)。 “创建”使用假数据创建一个虚拟表。除了“清除”按钮之外,所有按钮都可以使用,当我单击它时,Python 会完全崩溃,并且我没有任何错误消息可以开始找出问题所在。

我的问题是:1)我做错了什么? 2)我可以通过异常处理的形式做些什么来防止这种情况发生,这样我就可以看到将来出了什么问题?

import sys
from sqlite3 import *
from PyQt4 import QtCore, QtGui, QtSql
from PyQt4.QtCore import *
from PyQt4.QtGui import *

from test_class import Ui_MainWindow

class StartQT4(QtGui.QMainWindow, QTableWidget):
    def __init__(self, parent=None):
        QtGui.QWidget.__init__(self, parent)
        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)
        QtCore.QObject.connect(self.ui.createbutton,QtCore.SIGNAL("clicked()"),self.file_dialog)
QtCore.QObject.connect(self.ui.addrowbutton,QtCore.SIGNAL("clicked()"),self.add_row)
QtCore.QObject.connect(self.ui.addcollumnbutton,QtCore.SIGNAL("clicked()"),self.add_column)
QtCore.QObject.connect(self.ui.clearbutton,QtCore.SIGNAL("clicked()"),self.clear_table)

def add_row(self):
    self.ui.tableWidget.insertRow (0)       

def add_column(self):
    self.ui.tableWidget.insertColumn (0)

def clear_table(self):
    #This bit that won't seem to work in any combination!
    #self.ui.tableWidget.clearContents()
    self.ui.tableWidget.clear()
    #self.ui.tableWidget.setColumnCount(0)
    #self.ui.tableWidget.setRowCount(0)

def file_dialog(self):
    self.ui.textEdit.setText("Testing testing")
    self.ui.tableWidget.setColumnCount(3)
    self.ui.tableWidget.setRowCount(3)
    a = QTableWidgetItem("A")
    self.ui.tableWidget.setHorizontalHeaderItem (0, a)
    a = QTableWidgetItem("B")
    self.ui.tableWidget.setHorizontalHeaderItem (1, a)
    self.ui.tableWidget.setHorizontalHeaderItem (2, a)
    b = QTableWidgetItem("Test")
    self.ui.tableWidget.setItem(1,1,b)       

if __name__ == "__main__":
    app = QtGui.QApplication(sys.argv)
    myapp = StartQT4()
    myapp.show()
    sys.exit(app.exec_())

【问题讨论】:

【参考方案1】:

它“完全崩溃”?没有堆栈跟踪和一切?难以置信……

无论如何,PyQt4 文档既不知道 QTableView.clear 也不知道 QTableView.clearContents,但它知道 QTableView.clearSpans 应该做你想做的事。

【讨论】:

啊,我意识到我使用的是 tableWidget,而不是 tableView,我的错!目前我一直在研究 tableWidget,因为我似乎无法在网上找到任何实际运行的 tableViews 的工作示例。我遇到的奇怪行为是 Windows 只是说“python.exe 已停止工作”并强制程序退出。还有什么我可以尝试让它与 tableWidget 一起工作的吗? 其实我是用一个QSql模型整理出来的,反正我最后也是这么想的。不过感谢您的帮助,您为我指明了正确的方向,终于解决了问题! 还是很奇怪... QTableWidget 知道clearclearContents(后者保留了标题)。但很高兴听到其他方法有效。 这个答案还不够,因为 clearSpans() 对 QTableView 中的数据没有影响 clearSpans 根本不删除内容,这是怎么选的答案?【参考方案2】:

也许迟到了,但是:

1) 我做错了什么?

任何错误都可能导致崩溃,所以我无法回答。

2) 我可以通过异常处理的形式做些什么来防止这种情况发生,以便我可以看到将来出了什么问题?

在调试模式下运行 python。在 windows 下,干净的崩溃是发生任何错误时的 PyQT 行为。

This 问题应该让您了解 QTableView 对象。

【讨论】:

以上是关于在 PyQt 中清除 TableView的主要内容,如果未能解决你的问题,请参考以下文章

如何在 PyQt 应用程序退出时禁用清除剪贴板?

PyQt,Qtable在启用排序时清除列

如何清除pyqt5中qtextbrowser的内容?

清除pyqt布局中的所有小部件

如何清除 pyqt QTableWidget?

Python - pyqt5 - 清除 QTextBrowser 的选择