首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在QListView中获取选定项

在QListView中获取选定项
EN

Stack Overflow用户
提问于 2021-01-06 21:37:16
回答 1查看 604关注 0票数 1

我试图得到选定的项目,当它按下一个按钮。我想要禁用按钮,直到项目被选中。我不知道我需要的方法是在模型类、QListView类中,还是应该使用这两个类的方法组合

这是我的密码

QListView.py

代码语言:javascript
复制
from PyQt5 import QtCore, QtGui, QtWidgets

class Ui_QListView(object):
    def setupUi(self, QListView):
        QListView.setObjectName("QListView")
        QListView.resize(357, 300)
        self.centralwidget = QtWidgets.QWidget(QListView)
        self.centralwidget.setObjectName("centralwidget")
        self.listView = QtWidgets.QListView(self.centralwidget)
        self.listView.setGeometry(QtCore.QRect(45, 34, 256, 192))
        self.listView.setObjectName("listView")
        self.pushButton = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton.setGeometry(QtCore.QRect(141, 238, 75, 23))
        self.pushButton.setObjectName("pushButton")
        QListView.setCentralWidget(self.centralwidget)
        self.menubar = QtWidgets.QMenuBar(QListView)
        self.menubar.setGeometry(QtCore.QRect(0, 0, 357, 21))
        self.menubar.setObjectName("menubar")
        QListView.setMenuBar(self.menubar)
        self.statusbar = QtWidgets.QStatusBar(QListView)
        self.statusbar.setObjectName("statusbar")
        QListView.setStatusBar(self.statusbar)

        self.retranslateUi(QListView)
        QtCore.QMetaObject.connectSlotsByName(QListView)

    def retranslateUi(self, QListView):
        _translate = QtCore.QCoreApplication.translate
        QListView.setWindowTitle(_translate("QListView", "List View"))
        self.pushButton.setText(_translate("QListView", "Selected"))

mainQListView.py

代码语言:javascript
复制
from QListView import Ui_QListView
from PyQt5 import QtCore, QtGui, QtWidgets 

class ListView(QtWidgets.QMainWindow, Ui_QListView):
    def __init__(self):
        super().__init__()
        self.setupUi(self)
        self.pushButton.setEnabled(False)
        model = QtGui.QStandardItemModel()
        for i in range(10):
            model.appendRow(QtGui.QStandardItem(str(i)))
        self.listView.setModel(model)
        self.pushButton.clicked.connect(self.getSelectedItem)

    def getSelectedItem(self):
        pass

if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
    ui = ListView()
    ui.show()
    sys.exit(app.exec_())

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-01-06 21:56:53

您必须使用selectedIndexes方法获取所选项的QModelIndex,并使用itemFromIndex获取QStandardItem:

代码语言:javascript
复制
class ListView(QtWidgets.QMainWindow, Ui_QListView):
    def __init__(self):
        super().__init__()
        self.setupUi(self)
        self.pushButton.setEnabled(False)
        model = QtGui.QStandardItemModel()
        for i in range(10):
            model.appendRow(QtGui.QStandardItem(str(i)))
        self.listView.setModel(model)

        self.listView.selectionModel().selectionChanged.connect(
            self.handle_selection_changed
        )
        self.pushButton.clicked.connect(self.handle_clicked)

    def handle_selection_changed(self):
        self.pushButton.setEnabled(bool(self.listView.selectedIndexes()))

    def handle_clicked(self):
        for index in self.listView.selectedIndexes():
            item = self.listView.model().itemFromIndex(index)
            print(item.text())

注意:不建议新类、变量或新文件的名称与现有元素的名称一致,因为它会生成无声错误(这是调试中最复杂的错误),因此我建议您更改QListView.py文件的名称。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65603703

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档