在PyQt中清空TableView

3 投票
2 回答
12139 浏览
提问于 2025-04-16 03:08

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

0

可能有点晚,但:

1) 我哪里做错了?

  • 任何错误都可能导致程序崩溃,所以我无法给出具体答案。

2) 我可以采取什么措施来处理异常,以防止这种情况发生,这样我将来可以看到哪里出错了?

  • 在调试模式下运行Python。在Windows系统中,当发生任何错误时,程序干脆崩溃是PyQT的表现。

这个问题可以帮助你了解如何使用QTableView对象。

1

它“完全崩溃”了?没有任何错误信息和堆栈跟踪?这听起来有点不可信……

不过,PyQt4 的文档里没有提到 QTableView.clear 或 QTableView.clearContents,但它提到了 QTableView.clearSpans,这个方法应该可以实现你想要的功能。

撰写回答