python GUI庫圖形界面開發(fā)之PyQt5表格控件QTableView詳細(xì)使用方法與實例
PyQt5表格控件QTableView簡介
在通常情況下,一個應(yīng)用需要和一批數(shù)據(jù)進行交互,然后以表格的形式輸出這些信息,這時就需要用到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對象實現(xiàn)的,通常QTableWidget就能夠滿足我們的要求
QTableView可用的模式
QTableView控件可以綁定一個模型數(shù)據(jù)用來更新控件上的內(nèi)容
| 名稱 | 含義 |
|---|---|
| QStringListModel | 儲存一組字符串 |
| QstandardItemModel | 存儲任意層次結(jié)構(gòu)的數(shù)據(jù) |
| QDirModel | 對文件系統(tǒng)進行封裝 |
| QSqlQueryModel | 對SQL的查詢結(jié)果集進行封裝 |
| QSqlTableModel | 對SQL中的表格進行封裝 |
| QSqlRelationalTableModel | 對帶有foreign key的SQL表格進行封裝 |
| QSortFilterProxyModel | 對模型中的數(shù)據(jù)進行排序或過濾 |
QTableView的使用實例
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è)置模型為自定義的模型
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_())
運行程序,顯示效果如圖

從圖中可以看出,表格并沒有填滿窗口,每列都可以自由拉伸,但是可能會出現(xiàn)滾動條
優(yōu)化1:需要表格填充滿窗口,可以添加一下代碼
#水平方向標(biāo)簽拓展剩下的窗口部分,填滿表格 self.tableView.horizontalHeader().setStretchLastSection(True) #水平方向,表格大小拓展到適當(dāng)?shù)某叽? self.tableView.horizontalHeader().setSectionResizeMode(QHeaderView.Stretch)
效果如下

優(yōu)化2:添加數(shù)據(jù)
#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)),
])
效果如圖

優(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)

本文主要介紹了PyQt5表格控件QTableView詳細(xì)使用方法與實例,更多關(guān)于這方面的知識請查看下面的相關(guān)鏈接
相關(guān)文章
Python實戰(zhàn)之看圖猜字游戲的實現(xiàn)
看圖猜成語,是考驗一個人的反應(yīng)能力,也考驗一個人的右腦思維。據(jù)說越聰明的人,這道題的完成率越高。本文就來用Python實現(xiàn)這一經(jīng)典小游戲,需要的可以參考一下2023-02-02
python四個坐標(biāo)點對圖片區(qū)域最小外接矩形進行裁剪
在圖像裁剪操作中,opencv和pillow兩個庫都具有相應(yīng)的函數(shù),如果想要對目標(biāo)的最小外接矩形進行裁剪該如何操作呢?本文就來詳細(xì)的介紹一下2021-06-06
如何用Python數(shù)據(jù)可視化來分析用戶留存率
今天和大家來分享一些數(shù)據(jù)可視化方向的干貨,我們來嘗試用Python來繪制一下“漏斗圖”,感興趣的小伙伴和小編一起進入課題吧,但愿大家會有所收獲2021-09-09
django 通過url實現(xiàn)簡單的權(quán)限控制的例子
今天小編就為大家分享一篇django 通過url實現(xiàn)簡單的權(quán)限控制的例子,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-08-08
Python實現(xiàn)病毒仿真器的方法示例(附demo)
這篇文章主要介紹了Python實現(xiàn)病毒仿真器的方法示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-02-02
爬蟲代理池Python3WebSpider源代碼測試過程解析
這篇文章主要介紹了爬蟲代理池Python3WebSpider源代碼測試過程解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2019-12-12

