首页 > 解决方案 > 尝试从 ComboBox 的字典中获取一个值并在 textEdit 中插入键

问题描述

我有一个字典和一个显示字典值的组合框,我需要在 textEdit 中打印用户选择的字典值的键。这是我的代码。

import sys
from PyQt5.QtCore import pyqtSlot
from PyQt5.QtWidgets import QApplication, QDialog, QMainWindow
from PyQt5.uic import loadUi
from math import pi

class MainPage(QMainWindow):

    classi = {None : None, "C25/30" : float(14.17), 
        "C28/35" : float(15.87), "C32/40" : float(18.13), 
        "C35/45" : float(19.83), "C40/50" : float(22.6),
        "C45/55" : float(25.5), "C50/60" : float(28.3)}

    Acciaio = {None : None, "B450C" : float(391.3)}

    Ferri = {14 : float(1.54), 16 : float(2.01),
         18 : float(2.54), 20 : float(3.14), 22 : float(3.8)}

    N = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

    def __init__(self):
        super(MainPage, self).__init__()
        loadUi('Concrete.ui', self)
        x = self.fillCombobox()
        y = self.fillCombobox_2()
        z = self.fillCombobox_3()
        v = self.fillCombobox_4()
        w = self.fillCombobox_5()
        a = self.fillCombobox_6()
        b = self.fillCombobox_7()
        c = self.fillCombobox_8()


    def fillCombobox(self):
        for i in self.classi:
            self.comboBox.addItem(i)


    def fillCombobox_2(self):
        for i in self.Acciaio:
            self.comboBox_2.addItem(i)

    def retrieveText(self):
        x = self.comboBox.currentData()
        self.textEdit.setText(x)


app = QApplication(sys.argv)
widget = MainPage()
widget.show()
sys.exit(app.exec_())

我知道函数retrieveText 不能满足我的要求,但这是一次尝试,而且它也没有提供任何输出。

标签: pythonpyqtpyqt5

解决方案


您必须通过 itemData 保存与键关联的值,并在选择项目时获取它。

class MainPage(QMainWindow):

    classi = {
        None: None,
        "C25/30": 14.17,
        "C28/35": 15.87,
        "C32/40": 18.13,
        "C35/45": 19.83,
        "C40/50": 22.6,
        "C45/55": 25.5,
        "C50/60": 28.3,
    }

    def __init__(self):
        super(MainPage, self).__init__()
        loadUi("Concrete.ui", self)
        self.comboBox.currentIndexChanged[int].connect(self.retrieveText)
        self.fillCombobox()

    def fillCombobox(self):
        for key, value in self.classi.items():
            self.comboBox.addItem(key, value)

    @pyqtSlot(int)
    def retrieveText(self, index):
        x = self.comboBox.itemData(index)
        if x is not None:
            self.textEdit.setText(str(x))

推荐阅读