如何从 qcombobox 获取 itemdata?
How can I get itemdata from qcombobox?
我在 QtWidgets.QPushButton 中单击以显示 QtWidgets.QComboBox 中的 itemData 时遇到问题。我用这段代码填充我的 ComboBox:
self.comboBox.addItem("Sandro",1)
self.comboBox.addItem("Daniel",2)
self.comboBox.addItem("Pedro",3)
它填满了QtWidgets.QComboBox,但是当我设置QtWidgets.QPushButton时出现了问题。我在 setupUi 中添加了这个:
self.pushButton.clicked.connect(self.showId)
并最终开发出函数showId:
id_us = self.comboBox.itemData(self.comboBox.currentIndex())
print('VAL ',id_us)
当我点击我的按钮时,windows 关闭,问题出在哪里?
我分享我的所有代码 accessForm.py:
# -*- coding: utf-8 -*-
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_Form(object):
def setupUi(self, Form):
Form.setObjectName("Form")
Form.resize(598, 245)
self.groupBox = QtWidgets.QGroupBox(Form)
self.groupBox.setGeometry(QtCore.QRect(10, 20, 541, 201))
self.groupBox.setObjectName("groupBox")
self.pushButton = QtWidgets.QPushButton(self.groupBox)
self.pushButton.setGeometry(QtCore.QRect(50, 150, 75, 23))
self.pushButton.setObjectName("pushButton")
self.label = QtWidgets.QLabel(self.groupBox)
self.label.setGeometry(QtCore.QRect(40, 30, 47, 13))
self.label.setObjectName("label")
self.comboBox = QtWidgets.QComboBox(self.groupBox)
self.comboBox.setGeometry(QtCore.QRect(110, 30, 111, 22))
self.comboBox.setObjectName("comboBox")
self.retranslateUi(Form)
QtCore.QMetaObject.connectSlotsByName(Form)
self.fillCombo()
self.pushButton.clicked.connect(self.showId)
def retranslateUi(self, Form):
_translate = QtCore.QCoreApplication.translate
Form.setWindowTitle(_translate("Form", "Form"))
self.groupBox.setTitle(_translate("Form", "Datos"))
self.pushButton.setText(_translate("Form", "Inicio"))
self.label.setText(_translate("Form", "TextLabel"))
def showId(self):
id_us = self.comboBox.itemData(self.comboBox.currentIndex()).toPyObject()
print('VAL ',id_us)
def fillCombo(self):
self.comboBox.addItem("Sandro",1)
self.comboBox.addItem("Daniel",2)
self.comboBox.addItem("Pedro",3)
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
Form = QtWidgets.QWidget()
ui = Ui_Form()
ui.setupUi(Form)
Form.show()
sys.exit(app.exec_())
提前致谢。
在我看来,您使用的是过时的教程,在 PyQt4 中,您必须使用 toPyObject()
方法将 PyQt 对象转换为 python 本机对象,但在 PyQt5 中不再是必要的:
def showId(self):
id_us = self.comboBox.itemData(self.comboBox.currentIndex()) # .toPyObject()
print('VAL ',id_us)
作为建议,它使用终端或 CMD 来获取错误消息,因为 IDE 在处理 PyQt 错误消息方面存在问题。
我在 QtWidgets.QPushButton 中单击以显示 QtWidgets.QComboBox 中的 itemData 时遇到问题。我用这段代码填充我的 ComboBox:
self.comboBox.addItem("Sandro",1)
self.comboBox.addItem("Daniel",2)
self.comboBox.addItem("Pedro",3)
它填满了QtWidgets.QComboBox,但是当我设置QtWidgets.QPushButton时出现了问题。我在 setupUi 中添加了这个:
self.pushButton.clicked.connect(self.showId)
并最终开发出函数showId:
id_us = self.comboBox.itemData(self.comboBox.currentIndex())
print('VAL ',id_us)
当我点击我的按钮时,windows 关闭,问题出在哪里? 我分享我的所有代码 accessForm.py:
# -*- coding: utf-8 -*-
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_Form(object):
def setupUi(self, Form):
Form.setObjectName("Form")
Form.resize(598, 245)
self.groupBox = QtWidgets.QGroupBox(Form)
self.groupBox.setGeometry(QtCore.QRect(10, 20, 541, 201))
self.groupBox.setObjectName("groupBox")
self.pushButton = QtWidgets.QPushButton(self.groupBox)
self.pushButton.setGeometry(QtCore.QRect(50, 150, 75, 23))
self.pushButton.setObjectName("pushButton")
self.label = QtWidgets.QLabel(self.groupBox)
self.label.setGeometry(QtCore.QRect(40, 30, 47, 13))
self.label.setObjectName("label")
self.comboBox = QtWidgets.QComboBox(self.groupBox)
self.comboBox.setGeometry(QtCore.QRect(110, 30, 111, 22))
self.comboBox.setObjectName("comboBox")
self.retranslateUi(Form)
QtCore.QMetaObject.connectSlotsByName(Form)
self.fillCombo()
self.pushButton.clicked.connect(self.showId)
def retranslateUi(self, Form):
_translate = QtCore.QCoreApplication.translate
Form.setWindowTitle(_translate("Form", "Form"))
self.groupBox.setTitle(_translate("Form", "Datos"))
self.pushButton.setText(_translate("Form", "Inicio"))
self.label.setText(_translate("Form", "TextLabel"))
def showId(self):
id_us = self.comboBox.itemData(self.comboBox.currentIndex()).toPyObject()
print('VAL ',id_us)
def fillCombo(self):
self.comboBox.addItem("Sandro",1)
self.comboBox.addItem("Daniel",2)
self.comboBox.addItem("Pedro",3)
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
Form = QtWidgets.QWidget()
ui = Ui_Form()
ui.setupUi(Form)
Form.show()
sys.exit(app.exec_())
提前致谢。
在我看来,您使用的是过时的教程,在 PyQt4 中,您必须使用 toPyObject()
方法将 PyQt 对象转换为 python 本机对象,但在 PyQt5 中不再是必要的:
def showId(self):
id_us = self.comboBox.itemData(self.comboBox.currentIndex()) # .toPyObject()
print('VAL ',id_us)
作为建议,它使用终端或 CMD 来获取错误消息,因为 IDE 在处理 PyQt 错误消息方面存在问题。