Clear a TableView in PyQt
I'm in the process of learning how to display data and tables using PyQt. Ultimately I'd like to have a Table showing the contents of a database, but for now I'm just getting to grips with some of the fundamentals. I have a basic setup (pasted below) made using Qt Designer with a set of buttons ("Create", "Add Row", "Add Column", and "Clear"). "Create" makes a dummy table with pretend data. All of the buttons work apart from the "Clear" button, and when I click it, Python crashes entirely, and I'm left with no error messages to start working out what is wrong.
My questions are: 1) What am I doing wrong? 2) What can I do in the form of exception handling to prevent this, so I can see what's gone wrong in the future ?
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_())
It "crashes entirely"? Without stack trace and everything? Hard to believe...
Anyway, the PyQt4 documentation knows neither QTableView.clear nor QTableView.clearContents, but it knows QTableView.clearSpans which is supposed to do what you want.
Maybe late but:
1) What am I doing wrong?
- Any error can cause the crash, so I cannot answer.
2) What can I do in the form of exception handling to prevent this, so I can see what's gone wrong in the future ?
- Run python in debug mode. Under windows, the clean crash is the PyQT behaviour when any error happens.
This question should get you going with QTableView objects.
精彩评论