无法将QLineEdit输入转换为浮点

2024-05-19 14:32:02 发布

您现在位置:Python中文网/ 问答频道 /正文

我制作了一个汇率程序,我可以从终端使用它,我试图为我制作一个接口,但我不能将QLineEdit输入转换为float。 它给了我这个错误

回溯(最近一次呼叫最后一次): …,第73行,在 self.buton.clicked.connect(lambda:self.pressed(currency1,currency2,输入)) …,第79行,按 数量=浮动(输入) ValueError:无法将字符串转换为浮点:


      self.lineEdit = QtWidgets.QLineEdit(self.verticalLayoutWidget_2)

      self.lineEdit.setObjectName("lineEdit")

----



     input=self.lineEdit.text()

----


    self.buton.clicked.connect(lambda: self.pressed(currency1, currency2,input))



    def pressed(self,currency1,currency2,input):

        quantity = float(input)

        if currency1 == "EUR":
           self.label.setText("{} EUR = {} {}".format(quantity, currency2, float(self.json_data["rates"][currency2]) * quantity))


        else:
             self.label.setText("{} {} = {} {}".format(quantity, currency1, currency2, float(
                (self.json_data["rates"][currency2] / self.json_data["rates"][currency1])) * quantity))

如果需要,这里是完整的代码。


from PyQt5 import QtCore, QtGui, QtWidgets
import requests



class Ui_Form(object):
    def setupUi(self, Form):
        Form.setObjectName("Exchange")
        Form.resize(850, 558)
        self.buton=QtWidgets.QPushButton("Calculate")
        self.verticalLayoutWidget_2 = QtWidgets.QWidget(Form)
        self.verticalLayoutWidget_2.setGeometry(QtCore.QRect(50, 60, 751, 351))
        self.verticalLayoutWidget_2.setObjectName("verticalLayoutWidget_2")
        self.verticalLayout_2 = QtWidgets.QVBoxLayout(self.verticalLayoutWidget_2)
        self.verticalLayout_2.setContentsMargins(0, 0, 0, 0)
        self.verticalLayout_2.setObjectName("verticalLayout_2")
        self.verticalLayout = QtWidgets.QVBoxLayout()
        self.verticalLayout.setObjectName("verticalLayout")
        self.lineEdit = QtWidgets.QLineEdit(self.verticalLayoutWidget_2)
        self.lineEdit.setObjectName("lineEdit")
        self.verticalLayout.addWidget(self.lineEdit)
        self.horizontalLayout = QtWidgets.QHBoxLayout()
        self.horizontalLayout.setObjectName("horizontalLayout")
        self.comboBox_2 = QtWidgets.QComboBox(self.verticalLayoutWidget_2)
        self.comboBox_2.setObjectName("comboBox_2")
        self.horizontalLayout.addWidget(self.comboBox_2)
        self.comboBox = QtWidgets.QComboBox(self.verticalLayoutWidget_2)
        self.comboBox.setObjectName("comboBox")
        self.horizontalLayout.addWidget(self.comboBox)
        self.verticalLayout.addLayout(self.horizontalLayout)
        self.verticalLayout_2.addLayout(self.verticalLayout)
        self.verticalLayout_2.addWidget(self.buton)
        self.label = QtWidgets.QLabel(self.verticalLayoutWidget_2)
        self.verticalLayout_2.addStretch()
        self.label.setText("")
        self.label.setObjectName("label")
        self.verticalLayout_2.addWidget(self.label)



        self.label.setText("Select currencies and enter the quantity")

        self.retranslateUi(Form)
        QtCore.QMetaObject.connectSlotsByName(Form)

        url = "http://data.fixer.io/api/latest?access_key=f79c72f7979f662b465bd28e40efa5cf&format=1"
        response = requests.get(url)
        self.json_data = response.json()
        kurlar=self.json_data["rates"].keys()
        for i in kurlar:
            self.comboBox.addItem(i)
            self.comboBox_2.addItem(i)

        index=self.comboBox.findText("TRY",QtCore.Qt.MatchFixedString)
        self.comboBox.setCurrentIndex(index)
        self.comboBox_2.setCurrentIndex(index)

        currency1=self.comboBox.currentText()
        currency2=self.comboBox_2.currentText()

        input=self.lineEdit.text()



        self.buton.clicked.connect(lambda: self.pressed(currency1, currency2,input))



    def pressed(self,currency1,currency2,input):

        quantity = float(input)

        if currency1 == "EUR":
           self.label.setText("{} EUR = {} {}".format(quantity, currency2, float(self.json_data["rates"][currency2]) * quantity))


        else:
             self.label.setText("{} {} = {} {}".format(quantity, currency1, currency2, float(
                (self.json_data["rates"][currency2] / self.json_data["rates"][currency1])) * quantity))


    def retranslateUi(self, Form):
        _translate = QtCore.QCoreApplication.translate
        Form.setWindowTitle(_translate("Form", "Form"))





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

Tags: selfformjsoninputdatalabelquantityqtwidgets
1条回答
网友
1楼 · 发布于 2024-05-19 14:32:02

出现这种情况是因为您在开始时从lineEdit中获取文本,这就是为什么它是一个空字符串。按下按钮后,您应该从lineEdit中获取文本

from PyQt5 import QtCore, QtGui, QtWidgets
import requests


class Ui_Form(object):
    def setupUi(self, Form):
        Form.setObjectName("Exchange")
        Form.resize(850, 558)
        self.buton = QtWidgets.QPushButton("Calculate")
        self.verticalLayoutWidget_2 = QtWidgets.QWidget(Form)
        self.verticalLayoutWidget_2.setGeometry(QtCore.QRect(50, 60, 751, 351))
        self.verticalLayoutWidget_2.setObjectName("verticalLayoutWidget_2")
        self.verticalLayout_2 = QtWidgets.QVBoxLayout(self.verticalLayoutWidget_2)
        self.verticalLayout_2.setContentsMargins(0, 0, 0, 0)
        self.verticalLayout_2.setObjectName("verticalLayout_2")
        self.verticalLayout = QtWidgets.QVBoxLayout()
        self.verticalLayout.setObjectName("verticalLayout")
        self.lineEdit = QtWidgets.QLineEdit(self.verticalLayoutWidget_2)
        self.lineEdit.setObjectName("lineEdit")
        self.verticalLayout.addWidget(self.lineEdit)
        self.horizontalLayout = QtWidgets.QHBoxLayout()
        self.horizontalLayout.setObjectName("horizontalLayout")
        self.comboBox_2 = QtWidgets.QComboBox(self.verticalLayoutWidget_2)
        self.comboBox_2.setObjectName("comboBox_2")
        self.horizontalLayout.addWidget(self.comboBox_2)
        self.comboBox = QtWidgets.QComboBox(self.verticalLayoutWidget_2)
        self.comboBox.setObjectName("comboBox")
        self.horizontalLayout.addWidget(self.comboBox)
        self.verticalLayout.addLayout(self.horizontalLayout)
        self.verticalLayout_2.addLayout(self.verticalLayout)
        self.verticalLayout_2.addWidget(self.buton)
        self.label = QtWidgets.QLabel(self.verticalLayoutWidget_2)
        self.verticalLayout_2.addStretch()
        self.label.setText("")
        self.label.setObjectName("label")
        self.verticalLayout_2.addWidget(self.label)

        self.label.setText("Select currencies and enter the quantity")

        self.retranslateUi(Form)
        QtCore.QMetaObject.connectSlotsByName(Form)

        url = "http://data.fixer.io/api/latest?access_key=f79c72f7979f662b465bd28e40efa5cf&format=1"
        response = requests.get(url)
        self.json_data = response.json()
        kurlar = self.json_data["rates"].keys()
        for i in kurlar:
            self.comboBox.addItem(i)
            self.comboBox_2.addItem(i)

        index = self.comboBox.findText("TRY", QtCore.Qt.MatchFixedString)
        self.comboBox.setCurrentIndex(index)
        self.comboBox_2.setCurrentIndex(index)

        currency1 = self.comboBox.currentText()
        currency2 = self.comboBox_2.currentText()


        self.buton.clicked.connect(lambda: self.pressed(currency1, currency2))

    def pressed(self, currency1, currency2):
        # getting the text from the lineEdit after pressing the button
        quantity = float(self.lineEdit.text())

        if currency1 == "EUR":
            self.label.setText(
                "{} EUR = {} {}".format(quantity, currency2, float(self.json_data["rates"][currency2]) * quantity))


        else:
            self.label.setText("{} {} = {} {}".format(quantity, currency1, currency2, float(
                (self.json_data["rates"][currency2] / self.json_data["rates"][currency1])) * quantity))

    def retranslateUi(self, Form):
        _translate = QtCore.QCoreApplication.translate
        Form.setWindowTitle(_translate("Form", "Form"))


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

相关问题 更多 >