QListView簡介
QListView列表視圖可以用來以列表的形式來展示數據。在Qt中使用Model-View結構來處理數據與視圖之間的關係,Model負責數據的存取,View負責數據的展示, 二者之間數據的交互則是通過委託(delegate)來實現。
QT提供了一些現成的models用於處理數據項:
- QStringListModel 用於存儲簡單的QString列表;
- StandardItemModel 管理複雜的樹型結構數據項,每項都可以包含任意數據;
- QDirModel 提供本地文件系統中的文件與目錄信息;
- QSqlQueryModel, QSqlTableModel,QSqlRelationTableModel用來訪問數據庫;
QListView是Model-View框架中的一個類,是Qt Model-View框架的組成部分,QListView實現了QAbstractItemView類定義的接口,以使其能夠顯示從QAbstractItemModel類派生的模型提供的數據。
QListView常用方法:
- setModel(): 用來設置View所關聯的Model,可以使用Python原生的list作為數據源Model;
- selectedItem(): 選中Model的條目;
- isSelected(): 判斷Model中的某條目是否被選中;
- setViewMode(): 設置視圖模式。(ListMode: 條目從上到下布局,小尺寸顯示, IconMode: 條目從左到右布局,大尺寸顯示)
QListView常用信號:
- clicked: 單擊某項時,發射此信號;
- doubleClicked: 雙擊擊某項時,發射此信號;
- activated: 當用戶激活index指定的項目時,發射此信號;
- entered: 當鼠標光標進入index指定的項目時,發射此信號;
- iconSizeChanged: 在視圖可見時設置此圖標大小時,發射此信號;
- indexesMoved: 在視圖中移動索引時,發射此信號;
- pressed: 按下鼠標按鈕時,發射此信號;
- viewportEntered: 當鼠標光標進入視圖時,發射此信號。
QListView類繼承關係:

測試QListView
使用QStandardItemModel作為QListView 所使用的模型,在QStandardItemModel中每個QStandardItem條目添加一個圖標和文本。完整代碼如下:
import sys,os
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtCore import Qt
from PyQt5.QtGui import QIcon, QStandardItem, QStandardItemModel
from PyQt5.QtWidgets import (QApplication, QWidget, QListView,
QLabel, QVBoxLayout)
class DemoListView(QWidget):
def __init__(self, parent=None):
super(DemoListView, self).__init__(parent)
# 設置窗口標題
self.setWindowTitle('實戰PyQt5: QListView Demo!')
# 設置窗口大小
self.resize(480, 360)
self.initUi()
def initUi(self):
vLayout = QVBoxLayout(self)
lv = QListView(self)
slm = QStandardItemModel()
self.sports = [
{'img':'/images/basketball.png', 'title':'籃球'},
{'img':'/images/football.png', 'title':'足球'},
{'img':'/images/rugby-ball.png', 'title':'橄欖球'},
{'img':'/images/valley-ball.png', 'title':'排球'}
]
for sport in self.sports:
item = QStandardItem(QIcon(os.path.dirname(__file__) + sport['img']), sport['title'])
slm.appendRow(item)
lv.setModel(slm)
lv.clicked.connect(self.onListViewClicked)
self.label = QLabel(self)
vLayout.addWidget(lv)
vLayout.addWidget(self.label)
self.setLayout(vLayout)
#設置選中第一行
lv.setCurrentIndex(slm.index(0, 0))
self.label.setText('當前選擇為: ' + self.sports[0]['title'])
def onListViewClicked(self, index):
#顯示選中的x信息
self.label.setText('當前選擇為: ' + self.sports[index.row()]['title'])
if __name__ == '__main__':
app = QApplication(sys.argv)
window = DemoListView()
window.show()
sys.exit(app.exec())運行結果如下圖:
測試QListView
本文知識點
- 使用QStandardItemModel作為視圖的模型;
- 使用QStandItem為QStandardItemModel添加條目;
- 為QStandItem條目添加一個圖標和文字信息。
原創文章,作者:投稿專員,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/221880.html
微信掃一掃
支付寶掃一掃