Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/360.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 具有索引恢复的QListView_Python_Python 3.x_Pyqt_Pyqt5_Qlistview - Fatal编程技术网

Python 具有索引恢复的QListView

Python 具有索引恢复的QListView,python,python-3.x,pyqt,pyqt5,qlistview,Python,Python 3.x,Pyqt,Pyqt5,Qlistview,作为对我上一篇文章的另一个问题的延伸。在QListView中保存和恢复所选项目的QListView。还原后所选项目的索引无法正确打印 使用currentchange-slot方法更改索引,它将在QListView中打印所选项目的正确索引。但在重新运行软件并恢复值后,按确定按钮而不更改任何项目,当前索引应与所选项目相对应,但在这种情况下只打印0? 它缺少什么 导入系统 从PyQt5导入QtCore、QtGui、QtWidgets 类小部件(QtWidgets.QDialog): def uuu

作为对我上一篇文章的另一个问题的延伸。在
QListView
中保存和恢复所选项目的
QListView
。还原后所选项目的索引无法正确打印

使用
currentchange-slot
方法更改索引,它将在
QListView
中打印所选项目的正确索引。但在重新运行软件并恢复值后,按
确定按钮
而不更改任何项目,当前索引应与所选项目相对应,但在这种情况下只打印
0
? 它缺少什么

导入系统 从PyQt5导入QtCore、QtGui、QtWidgets 类小部件(QtWidgets.QDialog): def uuu init uuu(self,parent=None): 超级(小部件,自我)。\uuuuu初始化\uuuuuuu(父级) self.setFont(QtGui.QFont(“Helvetica”,8,QtGui.QFont.Normal,斜体=False)) self.setWindowTitle(“获取所选项目”) lay=qtwidts.QVBoxLayout(self) self.button=qtwidts.QPushButton(“好”) self.button.clicked.connect(self.accept) self.listView=qtwidts.QListView() 放置内容边缘(10,10,10,10) lay.addWidget(self.listView) self.entry=QtGui.QStandardItemModel() self.listView.setModel(self.entry) self.listView.setspace(4) self.listView.setFont( QtGui.QFont(“Helvetica”,9,QtGui.QFont.Normal,斜体=False) ) self.listView.setUniformItemSizes(True) self.listView.setFixedSize(300150) Code_Group=qtwidts.QGroupBox() 代码组.setTitle(&选择和取消选择) 代码组设置布局(布局) Vlay=qtwidts.QVBoxLayout(self) Vlay.addWidget(代码组) addWidget(self.button,alignment=QtCore.Qt.AlignCenter) Vlay.setSizeConstraint(Vlay.SetFixedSize) self.setWindowFlag(QtCore.Qt.WindowMaximizeButtonHint,True) self.read_设置() self.listView.selectionModel().currentChanged.connect(self.on\u row\u changed) self.accepted.connect(self.write\u设置) 行上的def已更改(自身、当前、以前): self.\u INDEX=current.row() 打印('第%d行选择了'%current.Row()) def关闭事件(自身、事件): 打印(“关闭事件”) self.write_设置() 超级(小部件,自我)。关闭事件(事件) def read_设置(自身): 设置=QtCore.QSettings(“file.ini”,QtCore.QSettings.ini格式) settings.beginGroup(“listView”) model=self.listView.model() 如果设置。包含(“项目”): editTriggers=settings.value( “editTriggers”,类型=qtwidts.QAbstractItemView.editTriggers ) selectionMode=settings.value( “selectionMode”,type=qtwidts.QAbstractItemView.selectionMode ) selectionBehavior=settings.value( “selectionBehavior”,type=qtwidts.QAbstractItemView.selectionBehavior ) self.listView.setEditTriggers(editTriggers) self.listView.setSelectionMode(selectionMode) self.listView.setSelectionBehavior(selectionBehavior) items=settings.value(“items”,type=QtCore.QByteArray) stream=QtCore.QDataStream(items,QtCore.QIODevice.ReadOnly) 而不是stream.atEnd(): it=QtGui.QStandardItem() 流>>它 model.appendRow(it) selecteditems=settings.value(“selecteditems”,type=list) 对于selecteditems中的行: 索引=模型索引(第0行) self.listView.selectionModel().select( 索引,QtCore.QItemSelectionModel.Select ) 其他: 中的文本[ “项目名称1”, “项目名称2”, “项目名称3”, “项目名称4”, “项目名称5”, ]: it=QtGui.QStandardItem(文本) model.appendRow(it) self.listView.setEditTriggers( qtwidts.qabstractemview.NoEditTriggers ) self.listView.setSelectionMode( qtwidts.qabstractemview.SingleSelection ) self.listView.setSelectionBehavior( qtwidts.qabstractemview.SelectRows ) settings.endGroup() def写入_设置(自身): 设置=QtCore.QSettings(“file.ini”,QtCore.QSettings.ini格式) settings.beginGroup(“listView”) model=self.listView.model() settings.setValue(“editTriggers”,self.listView.editTriggers()) settings.setValue(“selectionMode”,self.listView.selectionMode()) settings.setValue(“selectionBehavior”,self.listView.selectionBehavior()) items=QtCore.QByteArray() stream=QtCore.QDataStream(items,QtCore.QIODevice.WriteOnly) 对于范围内的i(model.rowCount()): it=型号。项目(i)
stream您正在监视currentIndex,希望选择一个索引也会修改currentIndex,但这是不正确的。如果要还原currentIndex,则还必须保存并还原它

导入系统 从PyQt5导入QtCore、QtGui、QtWidgets 类小部件(QtWidgets.QDialog): def uuu init uuu(self,parent=None): 超级(小部件,自我)。\uuuuu初始化\uuuuuuu(父级) self.setFont(QtGui.QFont(“Helvetica”,8,QtGui.QFont.Normal,斜体=False)) self.setWindowTitle(“获取所选项目”) lay=qtwidts.QVBoxLayout(self) self.button=qtwidts.QPushButton(“好”) self.button.clicked.connect(self.accept) self.listView=qtwidts.QListView() 放置内容边缘(10,10,10,10) lay.addWidget(self.listView) self.entry=QtGui.QStandardItemModel() self.listView.setModel(self.entr
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.accept)
        self.listView = QtWidgets.QListView()
        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)

        Code_Group = QtWidgets.QGroupBox()
        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.read_settings()
        self.listView.selectionModel().currentChanged.connect(self.on_row_changed)

        self.accepted.connect(self.write_settings)

    def on_row_changed(self, current, previous):
        self._INDEX = current.row()
        print('Row %d selected' % current.row())

    def closeEvent(self, event):
        print("closeEvent")
        self.write_settings()
        super(Widget, self).closeEvent(event)

    def read_settings(self):
        settings = QtCore.QSettings("file.ini", QtCore.QSettings.IniFormat)
        settings.beginGroup("listView")
        model = self.listView.model()
        if settings.contains("items"):

            editTriggers = settings.value(
                "editTriggers", type=QtWidgets.QAbstractItemView.EditTriggers
            )
            selectionMode = settings.value(
                "selectionMode", type=QtWidgets.QAbstractItemView.SelectionMode
            )
            selectionBehavior = settings.value(
                "selectionBehavior", type=QtWidgets.QAbstractItemView.SelectionBehavior
            )
            self.listView.setEditTriggers(editTriggers)
            self.listView.setSelectionMode(selectionMode)
            self.listView.setSelectionBehavior(selectionBehavior)

            items = settings.value("items", type=QtCore.QByteArray)
            stream = QtCore.QDataStream(items, QtCore.QIODevice.ReadOnly)
            while not stream.atEnd():
                it = QtGui.QStandardItem()
                stream >> it
                model.appendRow(it)
            selecteditems = settings.value("selecteditems", type=list)
            for row in selecteditems:
                index = model.index(row, 0)
                self.listView.selectionModel().select(
                    index, QtCore.QItemSelectionModel.Select
                )
        else:
            for text in [
                "Itemname1",
                "Itemname2",
                "Itemname3",
                "Itemname4",
                "Itemname5",
            ]:
                it = QtGui.QStandardItem(text)
                model.appendRow(it)
                self.listView.setEditTriggers(
                    QtWidgets.QAbstractItemView.NoEditTriggers
                )
                self.listView.setSelectionMode(
                    QtWidgets.QAbstractItemView.SingleSelection
                )
                self.listView.setSelectionBehavior(
                    QtWidgets.QAbstractItemView.SelectRows
                )
        settings.endGroup()

    def write_settings(self):
        settings = QtCore.QSettings("file.ini", QtCore.QSettings.IniFormat)
        settings.beginGroup("listView")
        model = self.listView.model()

        settings.setValue("editTriggers", self.listView.editTriggers())
        settings.setValue("selectionMode", self.listView.selectionMode())
        settings.setValue("selectionBehavior", self.listView.selectionBehavior())

        items = QtCore.QByteArray()
        stream = QtCore.QDataStream(items, QtCore.QIODevice.WriteOnly)
        for i in range(model.rowCount()):
            it = model.item(i)
            stream << it
        settings.setValue("items", items)

        selecteditems = []
        for index in self.listView.selectionModel().selectedRows():
            selecteditems.append(index.row())
        settings.setValue("selecteditems", selecteditems)
        settings.endGroup()


if __name__ == "__main__":
    app = QtWidgets.QApplication(sys.argv)
    w = Widget()
    w.show()
    sys.exit(app.exec_())