python - 在 PyQt 中清除一个 TableView

标签 python qt pyqt pyqt4

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

最佳答案

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

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

关于python - 在 PyQt 中清除一个 TableView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3542875/

相关文章:

c++ - 使用动态创建的选项卡元素在 C++ 和 QML 之间进行绑定(bind)

qt - PyQt:为现有数据库制作 CRUD UI 的最简单方法?

python - 与队列一起使用时 "threads"列表变量的用途是什么

python - PyQt。如何将函数值转换为lineEdit?请帮助找到更好的方法

Python 如何在不存在分隔符时处理拆分?

python - 如何在给定日期时间值限制下填充数据框中的列?

c++ - 如何在qt中的QTableWidget中获取comboBox项后的行号

c++ - 将Makefile包含到qmake中,继承属性

python - Pandas:按行划分多索引数据帧

带有 pyuno 的 Python 2.7