68621


Pyqt5のQListViewを使って作ったアイテムモデルで現在のインデックスを指定したいです。

index0ボタンを押したら現在指定されているインデックスが0番目になるようにしたいのですが、やり方が分かりません。

どうすればよいのでしょうか。

* * *

**表示されるGUI**  
[![画像](https://i.stack.imgur.com/Ur88t.png)](https://i.stack.imgur.com/Ur88t.png)

**ソースコード**

[code]

    import sys
    from PyQt5 import QtGui,QtCore, QtWidgets
    from PyQt5.QtWidgets import *
    from PyQt5.QtGui import *
    from PyQt5.QtCore import *
    
    
    class TreeModel(QtCore.QAbstractItemModel):
        def __init__(self):
            QtCore.QAbstractItemModel.__init__(self)
            #self.nodes = ['node0', 'node1', 'node2', "node4", "node5"]
    
        def index(self, row, column, parent):
            return self.createIndex(row, column, nodes[row])
    
        def parent(self, index):
            return QtCore.QModelIndex()
    
        def rowCount(self, index):
            if index.internalPointer() in nodes:
                return 0
            return len(nodes)
    
        def columnCount(self, index):
            return 1
    
        def data(self, index, role):
            if role == 0: 
                return index.internalPointer()
            else:
                return None
    
        def supportedDropActions(self): 
            return QtCore.Qt.CopyAction | QtCore.Qt.MoveAction         
    
        def flags(self, index):
            if not index.isValid():
                return QtCore.Qt.ItemIsEnabled
            return QtCore.Qt.ItemIsEnabled | QtCore.Qt.ItemIsSelectable | \
                   QtCore.Qt.ItemIsDragEnabled | QtCore.Qt.ItemIsDropEnabled        
    
        def mimeTypes(self):
            return ['text/xml']
    
        def mimeData(self, indexes):
            mimedata = QtCore.QMimeData()
            mimedata.setData('text/xml', 'mimeData')
            return mimedata
    
        def dropMimeData(self, data, action, row, column, parent):
            print ('dropMimeData %s %s %s %s' % (data.data('text/xml'), action, row, parent))
            return True
    
    
    class MainForm(QWidget):
        def __init__(self, parent=None):
            super(MainForm, self).__init__(parent)
    
            self.treeModel = TreeModel()
            
            self.view = QListView()
            self.view.setModel(self.treeModel)
            self.view.activated.connect(self.viewClicked2)#ダブルクリックでの動作
            self.view.clicked.connect(self.viewClicked)
            
            self.btn=QPushButton("index0")
            self.btn.clicked.connect(self.change_index)
            
            layout = QHBoxLayout(self)
            layout.addWidget(self.view)
            layout.addWidget(self.btn)
    
            self.setLayout(layout)
    
            self.show()
            
        def viewClicked(self, indexClicked):
            print('index of proxy row', indexClicked.row())
            
        def viewClicked2(self, index):
            print(index.row())
            
        def change_index(self):
            #print(self.view.currentIndex())
            #self.view.setCurrentIndex(0)
            pass
    
    
    def main():
        app = QApplication(sys.argv)
        form = MainForm()
        form.show()
        app.exec_()
    
    if __name__ == '__main__':
        nodes=['node0', 'node1', 'node2', "node4", "node5"]
        main()
    
[/code]


CC BY-SA 4.0
2020-07-15T13:51:18.460
68616
2020-07-15T15:06:49.410
26529
question
python pyqt5
pyqt5のQListViewで現在のIndexを指定したい


下記のコードで最初の行を[`select`](https://doc.qt.io/qt-5/qitemselectionmodel.html#select)できます。  
[`createIndex`](https://doc.qt.io/qt-5/qabstractitemmodel.html#createIndex)の第一引数で選択行を変更できます。

[code]

    def change_index(self):
        index = self.view.model().createIndex(0, 0)
        self.view.selectionModel().select(index, QItemSelectionModel.ClearAndSelect)
    
[/code]

[SO本家の類似質問(C++)](https://stackoverflow.com/q/461870/8248751)


CC BY-SA 4.0
2020-07-15T15:06:49.410
68621
2020-07-15T15:06:49.410
9820
68616
answer