清除PyQt中的TableView

时间:2010-08-22 18:57:18

标签: python qt pyqt pyqt4

我正在学习如何使用PyQt显示数据和表格。最后,我希望有一个表格显示数据库的内容,但是现在我只是想掌握一些基本原理。我有一个使用Qt Designer制作的基本设置(粘贴在下面),带有一组按钮(“创建”,“添加行”,“添加列”和“清除”)。 “Create”创建一个带有假装数据的虚拟表。所有按钮都与“清除”按钮分开工作,当我点击它时,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 :(得分:2)

它“完全崩溃”?没有堆栈跟踪和一切?很难相信......

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

答案 1 :(得分:0)

也许迟到了,但是:

1)我做错了什么?

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

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

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

This问题可以让你使用QTableView对象。