PyQt5 QItemSelection類使用小結
QItemSelection 是 PyQt5 模型/視圖框架中用于管理 ?多個項目選擇范圍的類,常用于處理用戶在多選操作(如表格、列表的多選)中的選中狀態(tài)。它通過存儲多個 QItemSelectionRange 對象來記錄復雜的選擇區(qū)域,支持跨行、跨列或任意單元格組合的選擇。
核心功能
- ?多范圍選擇:支持存儲多個獨立的選擇區(qū)域(如非連續(xù)選中的行或單元格)。
- ?索引操作:合并、拆分或查詢選擇范圍。
- ?與模型交互:與
QItemSelectionModel配合,管理視圖組件的選中狀態(tài)。
常用方法
| 方法 | 說明 | 返回值 |
|---|---|---|
| append(range: QItemSelectionRange) | 添加一個選擇范圍到當前選中區(qū)域 | None |
| merge(other: QItemSelection) | 合并另一個 QItemSelection 到當前實例 | None |
| split(range: QItemSelectionRange) | 將指定范圍拆分成更小的范圍 | QItemSelection |
| contains(index: QModelIndex) | 判斷某個索引是否在選中范圍內 | bool |
| count() | 返回選中范圍的數量 | int |
| clear() | 清空所有選擇范圍 | None |
?關鍵代碼示例
?1. 創(chuàng)建并操作選擇范圍
from PyQt5.QtCore import QItemSelection, QItemSelectionRange, QModelIndex
# 假設存在模型索引 index1 和 index2(如表格中的單元格)
index1 = QModelIndex() # 實際使用時需從模型獲取有效索引
index2 = QModelIndex() # 例如: model.index(0, 0), model.index(2, 2)
# 創(chuàng)建選擇范圍(從 index1 到 index2 的矩形區(qū)域)
range1 = QItemSelectionRange(index1, index2)
# 初始化 QItemSelection 并添加范圍
selection = QItemSelection()
selection.append(range1)
# 檢查索引是否被選中
print("是否包含 index1:", selection.contains(index1)) # True?2. 合并兩個選擇區(qū)域
# 創(chuàng)建另一個選擇范圍
range2 = QItemSelectionRange(model.index(3, 0), model.index(3, 2))
selection2 = QItemSelection()
selection2.append(range2)
# 合并到第一個選擇區(qū)域
selection.merge(selection2)
print("合并后的范圍數量:", selection.count()) # 2?與 QItemSelectionModel 結合使用
QItemSelectionModel 是管理視圖(如 QTableView)中選中狀態(tài)的核心類。通過信號 selectionChanged 可以捕獲用戶的選中操作。
from PyQt5.QtWidgets import QTableView, QApplication
from PyQt5.QtCore import QItemSelectionModel
class MyTableView(QTableView):
def __init__(self):
super().__init__()
# 初始化模型(假設已設置)
self.setModel(...)
# 獲取選擇模型并連接信號
self.selectionModel().selectionChanged.connect(self.handle_selection)
def handle_selection(self, selected: QItemSelection, deselected: QItemSelection):
# 處理新增選中區(qū)域
for range in selected:
top_left = range.topLeft()
bottom_right = range.bottomRight()
print(f"選中范圍: 行 {top_left.row()}-{bottom_right.row()}, 列 {top_left.column()}-{bottom_right.column()}")
app = QApplication([])
window = MyTableView()
window.show()
app.exec_()?應用場景
- ?批量操作:用戶選中多行數據后執(zhí)行刪除/導出。
- ?高亮顯示:根據選中區(qū)域動態(tài)改變單元格樣式。
- ?數據聯動:主從視圖間通過選中狀態(tài)同步數據。
?注意事項
?索引有效性:
- 確保操作時
QModelIndex有效(如模型未重置)。
- 確保操作時
?性能優(yōu)化:
- 處理大型數據時避免頻繁操作
QItemSelection,可合并后再更新視圖。
- 處理大型數據時避免頻繁操作
?信號與槽:
- 使用
selectionChanged信號時,區(qū)分selected(新增選中)和deselected(取消選中)參數。
- 使用
通過 ?QItemSelection,可以高效管理復雜的用戶選擇行為,為模型/視圖應用提供靈活的數據交互能力。
到此這篇關于PyQt5 QItemSelection類使用小結的文章就介紹到這了,更多相關PyQt5 QItemSelection內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
conda與jupyter notebook kernel核環(huán)境不一致的問題解決
本文記錄在使用conda時候出現的問題,jupter notebook中的環(huán)境不一致導致的,具有一定的參考價值,感興趣的可以了解一下2023-05-05
Python利用GeoPandas打造一個交互式中國地圖選擇器
在數據分析和可視化領域,地圖是展示地理信息的強大工具,被將使用Python、wxPython 和 GeoPandas 構建的交互式中國地圖行政區(qū)劃選擇器,感興趣的可以了解下2025-08-08
基于Python和Pygame打造一個有趣的化學配對記憶游戲
這篇文章主要為大家詳細介紹了如何基于Python和Pygame打造一個趣味化學學習工具,即有趣的化學配對記憶游戲,文中的示例代碼講解詳細,感興趣的小伙伴可以了解下2026-02-02
Python如何運用pyaudio庫去做一個固定采樣率音頻錄制器
這篇文章主要介紹了Python如何運用pyaudio庫去做一個固定采樣率音頻錄制器問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-05-05
解決webdriver.Chrome()報錯:Message:''chromedriver'' executable n
這篇文章主要介紹了解決webdriver.Chrome()報錯:Message:'chromedriver' executable needs to be in Path ,具有一定的參考價值,感興趣的小伙伴們可以參考一下2019-06-06

