我试图得到选定的项目,当它按下一个按钮。我想要禁用按钮,直到项目被选中。我不知道我需要的方法是在模型类、QListView类中,还是应该使用这两个类的方法组合
这是我的密码
QListView.py
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
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_())

发布于 2021-01-06 21:56:53
您必须使用selectedIndexes方法获取所选项的QModelIndex,并使用itemFromIndex获取QStandardItem:
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文件的名称。
https://stackoverflow.com/questions/65603703
复制相似问题