清空PyQt中的TableView

3
我正在学习如何使用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_())
2个回答

1

它“完全崩溃”?没有堆栈跟踪和其他信息吗?难以置信...

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


啊,我意识到我正在使用的是tableWidget而不是tableView,我的错误!目前我一直在使用tableWidget,因为似乎找不到任何能够正常运行的tableView在线示例。我所遇到的奇怪问题是,窗口只是说“python.exe已停止工作”,并强制退出程序。是否还有其他方法可以尝试让它与tableWidget一起工作? - belometer
实际上,我已经使用了QSql模型对其进行了排序,这正是我最终想要的。不过还是感谢您的帮助,您指引了我正确的方向,让我最终解决了问题! - belometer
还是有点奇怪... QTableWidget 知道 clearclearContents 两个函数(后者保留表头)。但很高兴听到有其他方法可行。 - user395760
1
这个答案不够充分,因为clearSpans()对QTableView中的数据没有影响。 - NL23codes
clearSpans并没有完全删除内容,为什么会被选为答案呢? - misantroop

0

可能有点晚了:

1)我做错了什么?

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

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

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

这个问题应该让你开始使用QTableView对象。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接