拥有一个QListView
想要保存和恢复QListView
中的选择。单击“确定”按钮时,所选项目保存,再次运行时,恢复所选项目并显示?如何做到这一点?你知道吗
显示
代码
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_())
考虑到my previous answer,我实现了一个类似的逻辑,其中使用QDataStream保存项目,并保存所选行,然后还原它。你知道吗
相关问题 更多 >
编程相关推荐