Reputation: 841
I have a problem when I clicked in a QtWidgets.QPushButton to show the itemData from a QtWidgets.QComboBox. I fill my ComboBox with this code:
self.comboBox.addItem("Sandro",1)
self.comboBox.addItem("Daniel",2)
self.comboBox.addItem("Pedro",3)
It filled the QtWidgets.QComboBox, however the problem appears when I set the QtWidgets.QPushButton. I added this in the setupUi:
self.pushButton.clicked.connect(self.showId)
And finally developed the function showId:
id_us = self.comboBox.itemData(self.comboBox.currentIndex())
print('VAL ',id_us)
When I clicked my button, the windows closes, What was the problem? I share all the code of my 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_())
Thanks in advance.
Upvotes: 3
Views: 2198
Reputation: 243907
It seems to me that you are using an outdated tutorial, in PyQt4 you had to convert the PyQt object to python native object using the toPyObject()
method, but in PyQt5 it is no longer necessary:
def showId(self):
id_us = self.comboBox.itemData(self.comboBox.currentIndex()) # .toPyObject()
print('VAL ',id_us)
As a recommendation, it uses the terminal or CMD to obtain the error messages since the IDEs have problems with handling the PyQt error messages.
Upvotes: 3