PyQt5 QListView 高亮顯示某一條目的案例

正在做的項目遇到的問題 , 在縮略圖列表中選擇某一圖,同時關聯到圖片list裡高亮顯示這個圖片名字。

一開始我直接用setCurrentIndex(int) 來設置

if msg == "CAM1_Label_1":
  self.showCamOnTopScreen(0)
  self.device_listView.setCurrentIndex(0)

結果報錯,提示

“setCurrentIndex(self, QModelIndex): argument 1 has unexpected type ‘int’”

後來發現此處不能直接用int , 而應該跟用初始化時的model.index() 來設置。

修改如下:

if msg == "CAM1_Label_1":
  self.showCamOnTopScreen(0)
  idx = self.devicelistModel.index(0)
  self.device_listView.setCurrentIndex(idx)

補充:pyqt5 Qlistiew指定index顯示

要求:

根據實驗步驟, 指定顯示當前的流程在哪個步驟。記錄一下

# QListView使用
from PyQt5.QtWidgets import QMessageBox, QListView, QStatusBar, QMenuBar, QMenu, QAction, QLineEdit, QStyle, \
  QFormLayout, QVBoxLayout, QWidget, QApplication, QHBoxLayout, QPushButton, QMainWindow, QGridLayout, QLabel
from PyQt5.QtGui import QIcon, QPixmap, QStandardItem, QStandardItemModel
from PyQt5.QtCore import QStringListModel, QAbstractListModel, QModelIndex, QSize
import sys
class WindowClass(QMainWindow):
  def __init__(self, parent=None):
    super(WindowClass, self).__init__(parent)
    self.layout = QVBoxLayout()
    self.resize(200, 300)
    listModel = QStringListModel()
    listView = QListView()
    items = ["step0", "step1", "step2", "step3"]
    listModel.setStringList(items)    
    listView.setModel(listModel)
    
    # 修改index的參數 ,即可指定當前的那個索引被選中
    listViewindex = listModel.index(1)
    
    listView.setCurrentIndex(listViewindex)
    listView.clicked.connect(self.checkItem)
    self.layout.addWidget(listView)
    widget = QWidget()
    widget.setLayout(self.layout)
    self.setCentralWidget(widget)
  def checkItem(self, index):
    QMessageBox.information(self, "ListView", "選擇項是:%d" % (index.row()))
if __name__ == "__main__":
  app = QApplication(sys.argv)
  win = WindowClass()
  win.show()
  sys.exit(app.exec_())

listViewindex = listModel.index(3)和在listViewindex = listModel.index(1) 的情況下 的情況下

要註意判斷輸入的index的范圍,

以上為個人經驗,希望能給大傢一個參考,也希望大傢多多支持WalkonNet。如有錯誤或未考慮完全的地方,望不吝賜教。

推薦閱讀: