2010-08-22 152 views
3

我正在學習如何使用PyQt顯示數據和表格。最終,我希望有一個表格顯示數據庫的內容,但現在我只是掌握一些基礎知識。我有一個基本的設置(下面粘貼)使用Qt設計器與一組按鈕(「創建」,「添加行」,「添加列」和「清除」)。 「創建」使假裝數據生成一個虛擬表。除了「清除」按鈕,所有按鈕都可以工作,當我點擊它時,Python完全崩潰,並且我沒有任何錯誤消息來開始排除錯誤。在PyQt中清除表格視圖

我的問題是: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

它「完全崩潰」?沒有堆棧跟蹤和一切?難以置信......

無論如何,PyQt4文檔既不知道QTableView.clear也不知道QTableView.clearContents,但它知道QTableView.clearSpans它應該做你想做的。

+0

啊,我意識到我在使用tableWidget,而不是tableView,我的錯誤!目前我一直在研究tableWidget,因爲我似乎無法找到任何實際運行的tableView的在線實例。 我遇到的怪異行爲是Windows簡單地說「python.exe已停止工作」,並強制程序退出。還有什麼我可以嘗試讓它與tableWidget一起工作? – belometer 2010-08-22 21:44:22

+0

實際上,我已經用QSql模型對它進行了整理,這正是我最後的結果。感謝您的幫助,但您指出我正確的方向,最終完成整理! – belometer 2010-08-22 22:43:57

+0

仍然很奇怪...... QTableWidget知道'clear'和'clearContents'(後者將標題留在原地)。但很高興聽到別的作品。 – delnan 2010-08-23 10:41:59

0

也許晚了,但:

1)我在做什麼錯了?

  • 任何錯誤都可能導致崩潰,所以我無法回答。

2)我能做什麼以異常處理的形式來防止這種情況,所以我可以看到未來會出現什麼問題?

  • 以調試模式運行python。在windows下,乾淨的崩潰是PyQT在發生任何錯誤時的行爲。

This問題應該讓你去與QTableView對象。