Having a QListView
wants to save and restore the selection in QListView
. When Okay button clicks, selected item saves and when it runs again, restores the selected item and display? How to achieve that?
Display
The code
import sys
from PyQt5 import QtCore, QtGui, QtWidgets
class Widget(QtWidgets.QDialog):
def __init__(self, parent=None):
super(Widget, self).__init__(parent)
self.setFont(QtGui.QFont("Helvetica", 8, QtGui.QFont.Normal, italic=False))
self.setWindowTitle("Getting selected item")
lay = QtWidgets.QVBoxLayout(self)
self.button = QtWidgets.QPushButton("Okay")
self.button.clicked.connect(self.on_click_ok)
self.listView = QtWidgets.QListView(editTriggers=QtWidgets.QAbstractItemView.NoEditTriggers,
selectionMode=QtWidgets.QAbstractItemView.SingleSelection,
selectionBehavior=QtWidgets.QAbstractItemView.SelectRows,)
lay.setContentsMargins(10,10,10,10)
lay.addWidget(self.listView)
self.entry = QtGui.QStandardItemModel()
self.listView.setModel(self.entry)
self.listView.setSpacing(4)
self.listView.setFont(QtGui.QFont("Helvetica",9, QtGui.QFont.Normal, italic=False))
self.listView.setUniformItemSizes(True)
self.listView.setFixedSize(300, 150)
for i, text in enumerate(["Itemname1", "Itemname2", "Itemname3", "Itemname4", "Itemname5"]):
it = QtGui.QStandardItem(text)
self.entry.appendRow(it)
self.listView.selectionModel().currentChanged.connect(self.on_row_changed)
selection = self.listView.selectionModel().selectedRows()
ix = self.entry.index(0, 0)
sm = self.listView.selectionModel()
sm.select(ix, QtCore.QItemSelectionModel.Select)
Code_Group = QtWidgets.QGroupBox(self)
Code_Group.setTitle("&Selecting and deselecting")
Code_Group.setLayout(lay)
Vlay = QtWidgets.QVBoxLayout(self)
Vlay.addWidget(Code_Group)
Vlay.addWidget(self.button, alignment=QtCore.Qt.AlignCenter)
Vlay.setSizeConstraint(Vlay.SetFixedSize)
self.setWindowFlag(QtCore.Qt.WindowMaximizeButtonHint, True)
self._INDEX = 0
self.SELECTED = self.listView.selectedIndexes()
print(self.SELECTED)
def on_row_changed(self, current, previous):
self._INDEX = current.row()
print('Row %d selected' % current.row())
def on_click_ok(self):
print('Row index:', self._INDEX, 'After:')
self.accept()
def closeEvent(self,event):
super(Widget, self).closeEvent(event)
if __name__ == '__main__':
app = QtWidgets.QApplication(sys.argv)
w = Widget()
w.show()
sys.exit(app.exec_())