如何从 qcombobox 获取 itemdata? [英] How can I get itemdata from qcombobox?

查看:145
本文介绍了如何从 qcombobox 获取 itemdata?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在单击 QtWidgets.QPushButton 以显示 QtWidgets.QComboBox 中的 itemData 时遇到问题.我用这段代码填充我的 ComboBox:

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)

它填充了 QtWidgets.QComboBox,但是当我设置 QtWidgets.QPushButton 时出现问题.我在 setupUi 中添加了这个:

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)

最后开发了函数showId:

And finally developed the function showId:

id_us = self.comboBox.itemData(self.comboBox.currentIndex())
print('VAL ',id_us)

当我点击我的按钮时,窗口关闭了,这是什么问题?我分享了我的 accessForm.py 的所有代码:

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_())

提前致谢.

推荐答案

在我看来,您使用的是过时的教程,在 PyQt4 中,您必须使用 toPyObject() 将 PyQt 对象转换为 python 本机对象 方法,但在 PyQt5 中不再需要:

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)

作为建议,它使用终端或 CMD 来获取错误消息,因为 IDE 在处理 PyQt 错误消息方面存在问题.

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.

这篇关于如何从 qcombobox 获取 itemdata?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆