欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

PyQt6/PySide6中QTableView類的實(shí)現(xiàn)

 更新時(shí)間:2025年04月27日 11:07:12   作者:燃燈工作室  
本文主要介紹了PyQt6/PySide6中QTableView類的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

QTableView 是 PyQt6 或 PySide6 庫中用于顯示二維表格數(shù)據(jù)的控件。它是一個(gè)非常強(qiáng)大且靈活的控件,適用于展示和編輯表格數(shù)據(jù)。QTableView 通常與 QAbstractItemModel 的子類(如 QStandardItemModel 或自定義模型)一起使用,以提供數(shù)據(jù)源。下面我將詳細(xì)介紹 QTableView 的主要特性及其使用方法。

1. 基本概念

  • 表格視圖:用于顯示二維表格數(shù)據(jù)的控件。
  • 模型-視圖架構(gòu)QTableView 使用模型-視圖架構(gòu),其中 QTableView 是視圖部分,負(fù)責(zé)顯示數(shù)據(jù);而模型(如 QStandardItemModel)則負(fù)責(zé)管理數(shù)據(jù)。
  • 列和行:表格中的基本單位,由行和列組成。
  • 單元格:表格中的單個(gè)數(shù)據(jù)項(xiàng)。
  • 選擇模式:控制用戶如何選擇單元格、行或列。
  • 排序:支持對表格數(shù)據(jù)進(jìn)行排序。
  • 編輯模式:允許用戶直接在表格中編輯數(shù)據(jù)。

2. 創(chuàng)建 QTableView 實(shí)例

要使用 QTableView,首先需要導(dǎo)入相應(yīng)的庫:

from PyQt6.QtWidgets import QApplication, QTableView, QVBoxLayout, QWidget, QPushButton
from PyQt6.QtGui import QStandardItemModel, QStandardItem
# 或者
from PySide6.QtWidgets import QApplication, QTableView, QVBoxLayout, QWidget, QPushButton
from PySide6.QtGui import QStandardItemModel, QStandardItem

接著創(chuàng)建一個(gè)窗口,并在其中添加 QTableView 控件:

class MyWindow(QWidget):
    def __init__(self):
        super().__init__()
        self.setWindowTitle("我的應(yīng)用程序")
        self.setGeometry(100, 100, 800, 600)
      
        # 初始化UI
        self.initUI()
  
    def initUI(self):
        layout = QVBoxLayout()
      
        # 創(chuàng)建表格視圖
        self.table_view = QTableView(self)
      
        # 創(chuàng)建模型
        self.model = QStandardItemModel(4, 3)  # 4行3列
        self.model.setHorizontalHeaderLabels(['姓名', '年齡', '職業(yè)'])
      
        # 添加數(shù)據(jù)
        self.model.setItem(0, 0, QStandardItem('張三'))
        self.model.setItem(0, 1, QStandardItem('28'))
        self.model.setItem(0, 2, QStandardItem('工程師'))
        self.model.setItem(1, 0, QStandardItem('李四'))
        self.model.setItem(1, 1, QStandardItem('32'))
        self.model.setItem(1, 2, QStandardItem('教師'))
        self.model.setItem(2, 0, QStandardItem('王五'))
        self.model.setItem(2, 1, QStandardItem('25'))
        self.model.setItem(2, 2, QStandardItem('醫(yī)生'))
        self.model.setItem(3, 0, QStandardItem('趙六'))
        self.model.setItem(3, 1, QStandardItem('30'))
        self.model.setItem(3, 2, QStandardItem('律師'))
      
        # 設(shè)置模型到視圖
        self.table_view.setModel(self.model)
      
        # 添加按鈕
        button = QPushButton("打印選中項(xiàng)", self)
        button.clicked.connect(self.print_selection)
      
        # 添加到布局
        layout.addWidget(self.table_view)
        layout.addWidget(button)
      
        self.setLayout(layout)
  
    def print_selection(self):
        selected_indices = self.table_view.selectedIndexes()
        for index in selected_indices:
            row = index.row()
            column = index.column()
            value = index.data()
            print(f"行: {row}, 列: {column}, 值: {value}")

if __name__ == "__main__":
    app = QApplication([])
    window = MyWindow()
    window.show()
    app.exec()

3. QTableView 的常用屬性和方法

屬性

  • model:獲取或設(shè)置當(dāng)前使用的模型。
  • selectionModel:獲取或設(shè)置當(dāng)前的選擇模型。
  • currentIndex:獲取或設(shè)置當(dāng)前選中的索引。
  • horizontalHeader:獲取水平表頭。
  • verticalHeader:獲取垂直表頭。
  • cornerButtonEnabled:獲取或設(shè)置是否啟用角落按鈕。
  • showGrid:獲取或設(shè)置是否顯示網(wǎng)格線。
  • gridStyle:獲取或設(shè)置網(wǎng)格線樣式。
  • alternatingRowColors:獲取或設(shè)置是否交替行顏色。
  • sortingEnabled:獲取或設(shè)置是否啟用排序。
  • wordWrap:獲取或設(shè)置是否啟用自動(dòng)換行。
  • resizeMode:獲取或設(shè)置調(diào)整大小模式。
  • selectionBehavior:獲取或設(shè)置選擇行為(選擇單元格、行或列)。
  • selectionMode:獲取或設(shè)置選擇模式(單選或多選)。
  • editTriggers:獲取或設(shè)置編輯觸發(fā)器。
  • toolTip:獲取或設(shè)置工具提示文本。
  • statusTip:獲取或設(shè)置狀態(tài)欄提示文本。

方法

  • setModel(QAbstractItemModel):設(shè)置當(dāng)前使用的模型。
  • model() -> QAbstractItemModel:獲取當(dāng)前使用的模型。
  • setSelectionModel(QItemSelectionModel):設(shè)置當(dāng)前的選擇模型。
  • selectionModel() -> QItemSelectionModel:獲取當(dāng)前的選擇模型。
  • setCurrentIndex(QModelIndex):設(shè)置當(dāng)前選中的索引。
  • currentIndex() -> QModelIndex:獲取當(dāng)前選中的索引。
  • horizontalHeader() -> QHeaderView:獲取水平表頭。
  • verticalHeader() -> QHeaderView:獲取垂直表頭。
  • setCornerButtonEnabled(bool):設(shè)置是否啟用角落按鈕。
  • isCornerButtonEnabled() -> bool:判斷是否啟用角落按鈕。
  • setShowGrid(bool):設(shè)置是否顯示網(wǎng)格線。
  • showGrid() -> bool:判斷是否顯示網(wǎng)格線。
  • setGridStyle(Qt.PenStyle):設(shè)置網(wǎng)格線樣式。
  • gridStyle() -> Qt.PenStyle:獲取網(wǎng)格線樣式。
  • setAlternatingRowColors(bool):設(shè)置是否交替行顏色。
  • alternatingRowColors() -> bool:判斷是否交替行顏色。
  • setSortingEnabled(bool):設(shè)置是否啟用排序。
  • isSortingEnabled() -> bool:判斷是否啟用排序。
  • setWordWrap(bool):設(shè)置是否啟用自動(dòng)換行。
  • wordWrap() -> bool:判斷是否啟用自動(dòng)換行。
  • setResizeMode(QHeaderView.ResizeMode):設(shè)置調(diào)整大小模式。
  • resizeMode() -> QHeaderView.ResizeMode:獲取調(diào)整大小模式。
  • setSelectionBehavior(QAbstractItemView.SelectionBehavior):設(shè)置選擇行為。
  • selectionBehavior() -> QAbstractItemView.SelectionBehavior:獲取選擇行為。
  • setSelectionMode(QAbstractItemView.SelectionMode):設(shè)置選擇模式。
  • selectionMode() -> QAbstractItemView.SelectionMode:獲取選擇模式。
  • setEditTriggers(QAbstractItemView.EditTrigger):設(shè)置編輯觸發(fā)器。
  • editTriggers() -> QAbstractItemView.EditTrigger:獲取編輯觸發(fā)器。
  • setToolTip(str):設(shè)置工具提示文本。
  • toolTip() -> str:獲取工具提示文本。
  • setStatusTip(str):設(shè)置狀態(tài)欄提示文本。
  • statusTip() -> str:獲取狀態(tài)欄提示文本。
  • selectRow(int):選擇指定行。
  • selectColumn(int):選擇指定列。
  • clearSelection():清除選擇。
  • selectAll():全選。
  • selectedIndexes() -> List[QModelIndex]:獲取所有選中的索引。
  • resizeColumnsToContents():根據(jù)內(nèi)容調(diào)整列寬。
  • resizeRowsToContents():根據(jù)內(nèi)容調(diào)整行高。
  • hideColumn(int):隱藏指定列。
  • showColumn(int):顯示指定列。
  • hideRow(int):隱藏指定行。
  • showRow(int):顯示指定行。

4. 詳細(xì)示例

設(shè)置模型

# 創(chuàng)建模型
model = QStandardItemModel(4, 3)  # 4行3列
model.setHorizontalHeaderLabels(['姓名', '年齡', '職業(yè)'])

# 添加數(shù)據(jù)
model.setItem(0, 0, QStandardItem('張三'))
model.setItem(0, 1, QStandardItem('28'))
model.setItem(0, 2, QStandardItem('工程師'))
model.setItem(1, 0, QStandardItem('李四'))
model.setItem(1, 1, QStandardItem('32'))
model.setItem(1, 2, QStandardItem('教師'))
model.setItem(2, 0, QStandardItem('王五'))
model.setItem(2, 1, QStandardItem('25'))
model.setItem(2, 2, QStandardItem('醫(yī)生'))
model.setItem(3, 0, QStandardItem('趙六'))
model.setItem(3, 1, QStandardItem('30'))
model.setItem(3, 2, QStandardItem('律師'))

# 設(shè)置模型到視圖
table_view.setModel(model)

獲取當(dāng)前選中的索引

def print_selection():
    selected_indices = table_view.selectedIndexes()
    for index in selected_indices:
        row = index.row()
        column = index.column()
        value = index.data()
        print(f"行: {row}, 列: {column}, 值: {value}")

選擇行或列

# 選擇第1行
table_view.selectRow(1)

# 選擇第2列
table_view.selectColumn(2)

清除選擇

table_view.clearSelection()

全選

table_view.selectAll()

根據(jù)內(nèi)容調(diào)整列寬和行高

table_view.resizeColumnsToContents()
table_view.resizeRowsToContents()

隱藏和顯示列或行

# 隱藏第2列
table_view.hideColumn(2)

# 顯示第2列
table_view.showColumn(2)

# 隱藏第3行
table_view.hideRow(3)

# 顯示第3行
table_view.showRow(3)

啟用或禁用排序

table_view.setSortingEnabled(True)  # 啟用排序
table_view.setSortingEnabled(False)  # 禁用排序

設(shè)置選擇行為

table_view.setSelectionBehavior(QAbstractItemView.SelectionBehavior.SelectRows)  # 選擇整行
table_view.setSelectionBehavior(QAbstractItemView.SelectionBehavior.SelectColumns)  # 選擇整列
table_view.setSelectionBehavior(QAbstractItemView.SelectionBehavior.SelectItems)  # 選擇單元格

設(shè)置選擇模式

table_view.setSelectionMode(QAbstractItemView.SelectionMode.SingleSelection)  # 單選
table_view.setSelectionMode(QAbstractItemView.SelectionMode.ContiguousSelection)  # 連續(xù)多選
table_view.setSelectionMode(QAbstractItemView.SelectionMode.ExtendedSelection)  # 擴(kuò)展多選
table_view.setSelectionMode(QAbstractItemView.SelectionMode.MultiSelection)  # 多選

設(shè)置編輯觸發(fā)器

table_view.setEditTriggers(QAbstractItemView.EditTrigger.DoubleClicked | QAbstractItemView.EditTrigger.SelectedClicked)  # 雙擊或選中后點(diǎn)擊編輯

設(shè)置工具提示和狀態(tài)欄提示

table_view.setToolTip("這是一個(gè)表格視圖")
table_view.setStatusTip("查看和編輯數(shù)據(jù)")

5. 信號與槽機(jī)制

QTableView 支持多種信號,這些信號可以在用戶交互時(shí)發(fā)射。常見的信號包括 clicked、doubleClickedpressed、activated 和 selectionChanged。你可以通過連接這些信號到槽函數(shù)來處理用戶的輸入事件。

def on_clicked(index):
    row = index.row()
    column = index.column()
    value = index.data()
    print(f"點(diǎn)擊: 行: {row}, 列: {column}, 值: {value}")

def on_double_clicked(index):
    row = index.row()
    column = index.column()
    value = index.data()
    print(f"雙擊: 行: {row}, 列: {column}, 值: {value}")

def on_pressed(index):
    row = index.row()
    column = index.column()
    value = index.data()
    print(f"按下: 行: {row}, 列: {column}, 值: {value}")

def on_activated(index):
    row = index.row()
    column = index.column()
    value = index.data()
    print(f"激活: 行: {row}, 列: {column}, 值: {value}")

def on_selection_changed(selected, deselected):
    print("選擇發(fā)生變化")

table_view.clicked.connect(on_clicked)
table_view.doubleClicked.connect(on_double_clicked)
table_view.pressed.connect(on_pressed)
table_view.activated.connect(on_activated)
table_view.selectionModel().selectionChanged.connect(on_selection_changed)

6. 自定義樣式

除了使用內(nèi)置的樣式設(shè)置外,你還可以通過樣式表(QSS)來自定義 QTableView 的外觀。樣式表類似于CSS,提供了強(qiáng)大的樣式控制能力。

table_view.setStyleSheet("""
    QTableView {
        background-color: #f0f0f0;
        alternate-background-color: #e0e0e0;
        selection-background-color: #0078d7;
        selection-color: white;
        gridline-color: #cccccc;
        border: 1px solid #cccccc;
    }
    QTableView::item {
        padding: 5px;
    }
    QTableView::item:selected {
        background-color: #0078d7;
        color: white;
    }
    QTableView::item:hover {
        background-color: #d0d0d0;
    }
    QTableView::item:focus {
        outline: none;
    }
    QHeaderView::section {
        background-color: #e0e0e0;
        border: 1px solid #cccccc;
        padding: 5px;
    }
    QHeaderView::section:checked {
        background-color: #0078d7;
        color: white;
    }
""")

7. 動(dòng)態(tài)更新和控制

你可以動(dòng)態(tài)地更新 QTableView 的內(nèi)容,或者根據(jù)某些條件控制其行為。例如,在定時(shí)器或其他事件觸發(fā)時(shí)更新表格的數(shù)據(jù)。

import time
from PyQt6.QtCore import QTimer

class MyWindow(QWidget):
    def __init__(self):
        super().__init__()
        self.setWindowTitle("我的應(yīng)用程序")
        self.setGeometry(100, 100, 800, 600)
      
        # 初始化UI
        self.initUI()
      
        # 創(chuàng)建定時(shí)器
        self.timer = QTimer(self)
        self.timer.timeout.connect(self.update_table_view)
        self.timer.start(5000)  # 每5秒觸發(fā)一次
  
    def initUI(self):
        layout = QVBoxLayout()
      
        # 創(chuàng)建表格視圖
        self.table_view = QTableView(self)
      
        # 創(chuàng)建模型
        self.model = QStandardItemModel(4, 3)  # 4行3列
        self.model.setHorizontalHeaderLabels(['姓名', '年齡', '職業(yè)'])
      
        # 添加數(shù)據(jù)
        self.model.setItem(0, 0, QStandardItem('張三'))
        self.model.setItem(0, 1, QStandardItem('28'))
        self.model.setItem(0, 2, QStandardItem('工程師'))
        self.model.setItem(1, 0, QStandardItem('李四'))
        self.model.setItem(1, 1, QStandardItem('32'))
        self.model.setItem(1, 2, QStandardItem('教師'))
        self.model.setItem(2, 0, QStandardItem('王五'))
        self.model.setItem(2, 1, QStandardItem('25'))
        self.model.setItem(2, 2, QStandardItem('醫(yī)生'))
        self.model.setItem(3, 0, QStandardItem('趙六'))
        self.model.setItem(3, 1, QStandardItem('30'))
        self.model.setItem(3, 2, QStandardItem('律師'))
      
        # 設(shè)置模型到視圖
        self.table_view.setModel(self.model)
      
        # 添加到布局
        layout.addWidget(self.table_view)
      
        self.setLayout(layout)
  
    def update_table_view(self):
        # 更新模型數(shù)據(jù)
        self.model.clear()
        self.model.setHorizontalHeaderLabels(['姓名', '年齡', '職業(yè)'])
      
        # 添加新的數(shù)據(jù)
        self.model.setItem(0, 0, QStandardItem('張三'))
        self.model.setItem(0, 1, QStandardItem('29'))
        self.model.setItem(0, 2, QStandardItem('工程師'))
        self.model.setItem(1, 0, QStandardItem('李四'))
        self.model.setItem(1, 1, QStandardItem('33'))
        self.model.setItem(1, 2, QStandardItem('教師'))
        self.model.setItem(2, 0, QStandardItem('王五'))
        self.model.setItem(2, 1, QStandardItem('26'))
        self.model.setItem(2, 2, QStandardItem('醫(yī)生'))
        self.model.setItem(3, 0, QStandardItem('趙六'))
        self.model.setItem(3, 1, QStandardItem('31'))
        self.model.setItem(3, 2, QStandardItem('律師'))

if __name__ == "__main__":
    app = QApplication([])
    window = MyWindow()
    window.show()
    app.exec()

總結(jié)

QTableView 是 PyQt6/PySide6 中非常強(qiáng)大且靈活的控件,適用于各種需要展示和編輯表格數(shù)據(jù)的場景。通過設(shè)置不同的屬性和使用樣式表,你可以創(chuàng)建出豐富多樣的表格視圖樣式。同時(shí),通過信號與槽機(jī)制,你可以方便地處理用戶的輸入事件。希望以上內(nèi)容能幫助你更好地理解和運(yùn)用 QTableView,并能夠根據(jù)具體需求創(chuàng)建出功能豐富且用戶友好的表格視圖控件。

到此這篇關(guān)于PyQt6/PySide6中QTableView類的實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)PySide6 QTableView類內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • pytorch中的transforms模塊實(shí)例詳解

    pytorch中的transforms模塊實(shí)例詳解

    今天小編就為大家分享一篇pytorch中的transforms模塊實(shí)例詳解,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-12-12
  • python基于搜索引擎實(shí)現(xiàn)文章查重功能

    python基于搜索引擎實(shí)現(xiàn)文章查重功能

    這篇文章主要介紹了python基于搜索引擎實(shí)現(xiàn)文章查重功能,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-05-05
  • Python 字符串定義

    Python 字符串定義

    字符串是程序中最常見的數(shù)據(jù)類型。在Python中,可以使用三種方式定義字符串。單引號、雙引號和三引號。
    2009-09-09
  • Python中逗號的三種作用實(shí)例分析

    Python中逗號的三種作用實(shí)例分析

    這篇文章主要介紹了Python中逗號的三種作用,實(shí)例分析了Python中的逗號在類型轉(zhuǎn)換與打印輸出時(shí)的使用技巧,需要的朋友可以參考下
    2015-06-06
  • linux下python中文亂碼解決方案詳解

    linux下python中文亂碼解決方案詳解

    這篇文章主要介紹了linux下python中文亂碼解決方案詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-08-08
  • 關(guān)于python類SortedList詳解

    關(guān)于python類SortedList詳解

    這篇文章主要介紹了關(guān)于python類SortedList詳解,可以幫大家鞏固一下python類的基礎(chǔ)知識,有需要的朋友可以借鑒參考下,希望可以對廣大讀者有所幫助
    2021-09-09
  • Python中的pprint折騰記

    Python中的pprint折騰記

    這篇文章主要介紹了Python中的pprint折騰記,本文著重講解pprint的使用,并給出使用實(shí)例,需要的朋友可以參考下
    2015-01-01
  • Python利用Pydub實(shí)現(xiàn)自動(dòng)分割音頻

    Python利用Pydub實(shí)現(xiàn)自動(dòng)分割音頻

    pydub是一個(gè)輕量級的音頻處理庫,安裝方便,使用簡單。而且pydub提供了豐富的音頻處理功能,包括切割、合并、轉(zhuǎn)換等。本文將利用Pydub實(shí)現(xiàn)自動(dòng)分割音頻功能,感興趣的可以了解一下
    2023-05-05
  • Python基礎(chǔ)入門之if判斷語句

    Python基礎(chǔ)入門之if判斷語句

    Python條件語句是通過一條或多條語句的執(zhí)行結(jié)果(True或者False)來決定執(zhí)行的代碼塊,下面這篇文章主要給大家介紹了關(guān)于Python基礎(chǔ)入門之if判斷語句的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2021-09-09
  • 如何在Win10系統(tǒng)使用Python3連接Hive

    如何在Win10系統(tǒng)使用Python3連接Hive

    這篇文章主要介紹了如何在Win10系統(tǒng)使用Python3連接Hive,幫助大家更好的利用python讀取數(shù)據(jù),進(jìn)行探索、分析和挖掘工作。感興趣的朋友可以了解下
    2020-10-10

最新評論