您好,登錄后才能下訂單哦!
在通常情況下,一個應(yīng)用需要和一批數(shù)據(jù)進(jìn)行交互,然后以表格的形式輸出這些信息,這時就需要用到QTableView類了,在QTableView中可以使用自定義的數(shù)據(jù)模型來顯示內(nèi)容,通過setModel來綁定數(shù)據(jù)源
QTableWidget繼承自QTableView,主要區(qū)別是QTableView可以使用自定義的數(shù)據(jù)模型來顯示內(nèi)容(先通setModel來綁定數(shù)據(jù)源),而QTableWidget自能使用標(biāo)準(zhǔn)的數(shù)據(jù)模型,并且其單元格數(shù)據(jù)是通過QTableWidgetItem對象實(shí)現(xiàn)的,通常QTableWidget就能夠滿足我們的要求
QTableView控件可以綁定一個模型數(shù)據(jù)用來更新控件上的內(nèi)容
名稱 | 含義 |
---|---|
QStringListModel | 儲存一組字符串 |
QstandardItemModel | 存儲任意層次結(jié)構(gòu)的數(shù)據(jù) |
QDirModel | 對文件系統(tǒng)進(jìn)行封裝 |
QSqlQueryModel | 對SQL的查詢結(jié)果集進(jìn)行封裝 |
QSqlTableModel | 對SQL中的表格進(jìn)行封裝 |
QSqlRelationalTableModel | 對帶有foreign key的SQL表格進(jìn)行封裝 |
QSortFilterProxyModel | 對模型中的數(shù)據(jù)進(jìn)行排序或過濾 |
import sys from PyQt5.QtCore import * from PyQt5.QtWidgets import * from PyQt5.QtGui import * class Table(QWidget): def __init__(self,parent=None): super(Table, self).__init__(parent) #設(shè)置標(biāo)題與初始大小 self.setWindowTitle('QTableView表格視圖的例子') self.resize(500,300) #設(shè)置數(shù)據(jù)層次結(jié)構(gòu),4行4列 self.model=QStandardItemModel(4,4) #設(shè)置水平方向四個頭標(biāo)簽文本內(nèi)容 self.model.setHorizontalHeaderLabels(['標(biāo)題1','標(biāo)題2','標(biāo)題3','標(biāo)題4']) # #Todo 優(yōu)化2 添加數(shù)據(jù) # self.model.appendRow([ # QStandardItem('row %s,column %s' % (11,11)), # QStandardItem('row %s,column %s' % (11,11)), # QStandardItem('row %s,column %s' % (11,11)), # QStandardItem('row %s,column %s' % (11,11)), # ]) for row in range(4): for column in range(4): item=QStandardItem('row %s,column %s'%(row,column)) #設(shè)置每個位置的文本值 self.model.setItem(row,column,item) #實(shí)例化表格視圖,設(shè)置模型為自定義的模型 self.tableView=QTableView() self.tableView.setModel(self.model) # #todo 優(yōu)化1 表格填滿窗口 # #水平方向標(biāo)簽拓展剩下的窗口部分,填滿表格 # self.tableView.horizontalHeader().setStretchLastSection(True) # #水平方向,表格大小拓展到適當(dāng)?shù)某叽? # self.tableView.horizontalHeader().setSectionResizeMode(QHeaderView.Stretch) # # #TODO 優(yōu)化3 刪除當(dāng)前選中的數(shù)據(jù) # indexs=self.tableView.selectionModel().selection().indexes() # print(indexs) # if len(indexs)>0: # index=indexs[0] # self.model.removeRows(index.row(),1) #設(shè)置布局 layout=QVBoxLayout() layout.addWidget(self.tableView) self.setLayout(layout) if __name__ == '__main__': app=QApplication(sys.argv) table=Table() table.show() sys.exit(app.exec_())
運(yùn)行程序,顯示效果如圖
從圖中可以看出,表格并沒有填滿窗口,每列都可以自由拉伸,但是可能會出現(xiàn)滾動條
#水平方向標(biāo)簽拓展剩下的窗口部分,填滿表格 self.tableView.horizontalHeader().setStretchLastSection(True) #水平方向,表格大小拓展到適當(dāng)?shù)某叽? self.tableView.horizontalHeader().setSectionResizeMode(QHeaderView.Stretch)
效果如下
#Todo 優(yōu)化2 添加數(shù)據(jù) self.model.appendRow([ QStandardItem('row %s,column %s' % (11,11)), QStandardItem('row %s,column %s' % (11,11)), QStandardItem('row %s,column %s' % (11,11)), QStandardItem('row %s,column %s' % (11,11)), ])
效果如圖
indexs=self.tableView.selectionModel().selection().indexes() print(indexs) if len(indexs)>0: index=indexs[0] self.model.removeRows(index.row(),1)
本文主要介紹了PyQt5表格控件QTableView詳細(xì)使用方法與實(shí)例,更多關(guān)于這方面的知識請查看下面的相關(guān)鏈接
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。