最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

QTableView 是 PyQt6 或 PySide6 庫(kù)中用于顯示二維表格數(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)。
  • 選擇模式:控制用戶如何選擇單元格、行或列。
  • 排序:支持對(duì)表格數(shù)據(jù)進(jìn)行排序。
  • 編輯模式:允許用戶直接在表格中編輯數(shù)據(jù)。

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

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

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. 信號(hào)與槽機(jī)制

QTableView 支持多種信號(hào),這些信號(hào)可以在用戶交互時(shí)發(fā)射。常見(jiàn)的信號(hào)包括 clickeddoubleClicked、pressedactivated 和 selectionChanged。你可以通過(guò)連接這些信號(hào)到槽函數(shù)來(lái)處理用戶的輸入事件。

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è)置外,你還可以通過(guò)樣式表(QSS)來(lái)自定義 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ù)的場(chǎng)景。通過(guò)設(shè)置不同的屬性和使用樣式表,你可以創(chuàng)建出豐富多樣的表格視圖樣式。同時(shí),通過(guò)信號(hào)與槽機(jī)制,你可以方便地處理用戶的輸入事件。希望以上內(nèi)容能幫助你更好地理解和運(yùn)用 QTableView,并能夠根據(jù)具體需求創(chuàng)建出功能豐富且用戶友好的表格視圖控件。

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

相關(guān)文章

  • 使用python爬蟲(chóng)實(shí)現(xiàn)子域名探測(cè)問(wèn)題

    使用python爬蟲(chóng)實(shí)現(xiàn)子域名探測(cè)問(wèn)題

    子域名枚舉是為一個(gè)或多個(gè)域查找子域的過(guò)程,它是信息收集階段的重要組成部分,這篇文章主要介紹了使用python實(shí)現(xiàn)子域名探測(cè),需要的朋友可以參考下
    2022-07-07
  • Python字符串內(nèi)置函數(shù)功能與用法總結(jié)

    Python字符串內(nèi)置函數(shù)功能與用法總結(jié)

    這篇文章主要介紹了Python字符串內(nèi)置函數(shù)功能與用法,結(jié)合實(shí)例形式總結(jié)分析了Python常見(jiàn)字符串操作函數(shù)的功能、分類、使用方法及相關(guān)操作注意事項(xiàng),需要的朋友可以參考下
    2019-04-04
  • django數(shù)據(jù)庫(kù)報(bào)錯(cuò)解決匯總:django.db.utils.OperationalError?1045,1049,2003

    django數(shù)據(jù)庫(kù)報(bào)錯(cuò)解決匯總:django.db.utils.OperationalError?1045,1049,

    這篇文章主要給大家介紹了關(guān)于django數(shù)據(jù)庫(kù)報(bào)錯(cuò)解決:django.db.utils.OperationalError?1045,1049,2003的相關(guān)資料,文中將解決的辦法介紹的非常詳細(xì),需要的朋友可以參考下
    2023-02-02
  • VSCode中Python環(huán)境配置、創(chuàng)建虛擬環(huán)境及pip的一些常用命令

    VSCode中Python環(huán)境配置、創(chuàng)建虛擬環(huán)境及pip的一些常用命令

    這篇文章主要給大家介紹了關(guān)于VSCode中Python環(huán)境配置、創(chuàng)建虛擬環(huán)境及pip的一些常用命令,Python環(huán)境的創(chuàng)建是在VSCode中很常見(jiàn)的一個(gè)需求,特別是當(dāng)我們需要開(kāi)發(fā)或者調(diào)試多個(gè)Python項(xiàng)目時(shí),使用虛擬環(huán)境是一種好的方式,需要的朋友可以參考下
    2023-10-10
  • python 制作網(wǎng)站小說(shuō)下載器

    python 制作網(wǎng)站小說(shuō)下載器

    這篇文章主要介紹了python 如何制作網(wǎng)站小說(shuō)下載器,幫助大家更好的理解和使用python,感興趣的朋友可以了解下
    2021-02-02
  • python實(shí)現(xiàn)象棋游戲

    python實(shí)現(xiàn)象棋游戲

    這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)象棋游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-05-05
  • python交互模式下輸入換行/輸入多行命令的方法

    python交互模式下輸入換行/輸入多行命令的方法

    這篇文章主要介紹了python交互模式下輸入換行/輸入多行命令的方法,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-07-07
  • Python數(shù)據(jù)類型詳解(三)元祖:tuple

    Python數(shù)據(jù)類型詳解(三)元祖:tuple

    本文給大家介紹的是Python數(shù)據(jù)類型中的元祖(tuple),簡(jiǎn)單的說(shuō)Tuple,與列表一樣,元素也是不可變的,但與列表不同,在一個(gè)元祖可以包含不同類型的元素
    2016-05-05
  • pandas的相關(guān)系數(shù)與協(xié)方差實(shí)例

    pandas的相關(guān)系數(shù)與協(xié)方差實(shí)例

    今天小編就為大家分享一篇pandas的相關(guān)系數(shù)與協(xié)方差實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-12-12
  • Django中template for如何使用方法

    Django中template for如何使用方法

    這篇文章主要介紹了Django中template for如何使用方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-01-01

最新評(píng)論

固安县| 雅安市| 饶平县| 噶尔县| 上杭县| 田林县| 濮阳县| 南华县| 固始县| 桐乡市| 什邡市| 邹平县| 旅游| 全州县| 康马县| 望江县| 祁连县| 嘉祥县| 阿勒泰市| 叶城县| 防城港市| 夏河县| 仙游县| 竹溪县| 三门峡市| 浏阳市| 浠水县| 乐昌市| 呼伦贝尔市| 芦溪县| 光泽县| 台山市| 富锦市| 历史| 宜兴市| 锦屏县| 通州区| 镇坪县| 常宁市| 太保市| 灵山县|