3

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.

eyllanesc
  • 235,170
  • 19
  • 170
  • 241
GSandro_Strongs
  • 773
  • 3
  • 11
  • 24
  • 2
    when I run it in console on Linux then I get `AttributeError: 'int' object has no attribute 'toPyObject'`. It works correctly when I remove `.toPyObject()` – furas Apr 03 '19 at 22:41
  • Oh yes. You're ok. I was migrating from PyQt4 and with toPyObject ran. So I did it with your help, thanks a lot. – GSandro_Strongs Apr 03 '19 at 22:51

1 Answers1

3

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.

eyllanesc
  • 235,170
  • 19
  • 170
  • 241