Очистить TableView в PyQt - PullRequest
       4

Очистить TableView в PyQt

3 голосов
/ 22 августа 2010

Я учусь отображать данные и таблицы с помощью 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 ]

2 голосов
/ 23 августа 2010

Это "падает полностью"?Без трассировки стека и все?Трудно поверить ...

В любом случае, документация PyQt4 не знает ни QTableView.clear, ни QTableView.clearContents, но знает QTableView.clearSpans , которая должна делать то, что вы хотите.

0 голосов
/ 14 декабря 2016

Может быть поздно, но:

1) Что я делаю не так?

  • Любая ошибка может привести к сбою, поэтому я не могу ответить.

2) Что я могу сделать в форме обработки исключений, чтобы предотвратить это, чтобы я мог видеть, что пошло не так в будущем?

  • Запустить python в режиме отладки. В Windows чистый сбой - это поведение PyQT при возникновении любой ошибки.

Этот вопрос должен помочь вам разобраться с объектами QTableView.

...