1. 程式人生 > 程式設計 >python GUI庫圖形介面開發之PyQt5表格控制元件QTableView詳細使用方法與例項

python GUI庫圖形介面開發之PyQt5表格控制元件QTableView詳細使用方法與例項

PyQt5表格控制元件QTableView簡介

在通常情況下,一個應用需要和一批資料進行互動,然後以表格的形式輸出這些資訊,這時就需要用到QTableView類了,在QTableView中可以使用自定義的資料模型來顯示內容,通過setModel來繫結資料來源

QTableWidget繼承自QTableView,主要區別是QTableView可以使用自定義的資料模型來顯示內容(先通setModel來繫結資料來源),而QTableWidget自能使用標準的資料模型,並且其單元格資料是通過QTableWidgetItem物件實現的,通常QTableWidget就能夠滿足我們的要求

QTableView可用的模式

QTableView控制元件可以繫結一個模型資料用來更新控制元件上的內容

名稱 含義
QStringListModel 儲存一組字串
QstandardItemModel 儲存任意層次結構的資料
QDirModel 對檔案系統進行封裝
QSqlQueryModel 對SQL的查詢結果集進行封裝
QSqlTableModel 對SQL中的表格進行封裝
QSqlRelationalTableModel 對帶有foreign key的SQL表格進行封裝
QSortFilterProxyModel 對模型中的資料進行排序或過濾

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)
    #設定標題與初始大小
    self.setWindowTitle('QTableView表格檢視的例子')
    self.resize(500,300)

    #設定資料層次結構,4行4列
    self.model=QStandardItemModel(4,4)
    #設定水平方向四個頭標籤文字內容
    self.model.setHorizontalHeaderLabels(['標題1','標題2','標題3','標題4'])


    # #Todo 優化2 新增資料
    # self.model.appendRow([
    #   QStandardItem('row %s,column %s' % (11,11)),#   QStandardItem('row %s,# ])

    for row in range(4):
      for column in range(4):
        item=QStandardItem('row %s,column %s'%(row,column))
        #設定每個位置的文字值
        self.model.setItem(row,column,item)

    #例項化表格檢視,設定模型為自定義的模型
    self.tableView=QTableView()
    self.tableView.setModel(self.model)



    # #todo 優化1 表格填滿視窗
    # #水平方向標籤拓展剩下的視窗部分,填滿表格
    # self.tableView.horizontalHeader().setStretchLastSection(True)
    # #水平方向,表格大小拓展到適當的尺寸
    # self.tableView.horizontalHeader().setSectionResizeMode(QHeaderView.Stretch)
    #
    # #TODO 優化3 刪除當前選中的資料
    # indexs=self.tableView.selectionModel().selection().indexes()
    # print(indexs)
    # if len(indexs)>0:
    #   index=indexs[0]
    #   self.model.removeRows(index.row(),1)


    #設定佈局
    layout=QVBoxLayout()
    layout.addWidget(self.tableView)
    self.setLayout(layout)
if __name__ == '__main__':
  app=QApplication(sys.argv)
  table=Table()
  table.show()
  sys.exit(app.exec_())

執行程式,顯示效果如圖

python GUI庫圖形介面開發之PyQt5表格控制元件QTableView詳細使用方法與例項

從圖中可以看出,表格並沒有填滿視窗,每列都可以自由拉伸,但是可能會出現滾動條

優化1:需要表格填充滿視窗,可以新增一下程式碼

#水平方向標籤拓展剩下的視窗部分,填滿表格
self.tableView.horizontalHeader().setStretchLastSection(True)
#水平方向,表格大小拓展到適當的尺寸   
self.tableView.horizontalHeader().setSectionResizeMode(QHeaderView.Stretch)

效果如下

python GUI庫圖形介面開發之PyQt5表格控制元件QTableView詳細使用方法與例項

優化2:新增資料

#Todo 優化2 新增資料
    self.model.appendRow([
      QStandardItem('row %s,QStandardItem('row %s,])

效果如圖

python GUI庫圖形介面開發之PyQt5表格控制元件QTableView詳細使用方法與例項

優化3:刪除當前選中的資料

  indexs=self.tableView.selectionModel().selection().indexes()
    print(indexs)
    if len(indexs)>0:
      index=indexs[0]
      self.model.removeRows(index.row(),1)

python GUI庫圖形介面開發之PyQt5表格控制元件QTableView詳細使用方法與例項

本文主要介紹了PyQt5表格控制元件QTableView詳細使用方法與例項,更多關於這方面的知識請檢視下面的相關連結