简体   繁体   中英

How To connect QComboBox with QlineEdit in PyQt5

I'm developing a PyQt5 desktop GUI app, but am try to connect my comboBox such that, changing the variable in the combobox changes the values in the QlineEdit, please any help will be appreciated. Thanks

I have tried several codes but it seems their syntax was not corresponding. below is my code.

from PyQt5 import QtCore, QtGui, QtWidgets

class Ui_MainWindow(object):

    def event(self):
      # get value of the selected combobox data

        V = float(self.input1.text())
        U = float(self.input2.text())
        t = float(self.input3.text())
        a = float(self.input4.text())

        #conditions
        #if u,t,a are given, use this formulars
        V = U + a*t
        S = U*t + (a*t**2)/2
        t = (V - U)/a        
        #if u,a,s are given, 
        V =(U**2 + 2*a*S)**0.5
        S = (V**2 - U**2)/2*a 

        #set the selected combobox result
        self.lineEdit_result.setText


    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(347, 219)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.comboBox = QtWidgets.QComboBox(self.centralwidget)
        self.comboBox.setGeometry(QtCore.QRect(20, 40, 31, 22))
        self.comboBox.setObjectName("comboBox")
        self.comboBox.addItem("")
        self.comboBox.addItem("")
        self.comboBox.addItem("")
        self.comboBox.addItem("")
        self.comboBox.addItem("")
        self.input1 = QtWidgets.QLineEdit(self.centralwidget)
        self.input1.setGeometry(QtCore.QRect(60, 40, 113, 20))
        self.input1.setObjectName("input1")
        self.comboBox_1 = QtWidgets.QComboBox(self.centralwidget)
        self.comboBox_1.setGeometry(QtCore.QRect(20, 70, 31, 22))
        self.comboBox_1.setObjectName("comboBox_1")
        self.comboBox_1.addItem("")
        self.comboBox_1.addItem("")
        self.comboBox_1.addItem("")
        self.comboBox_1.addItem("")
        self.comboBox_1.addItem("")
        self.input2 = QtWidgets.QLineEdit(self.centralwidget)
        self.input2.setGeometry(QtCore.QRect(60, 70, 113, 20))
        self.input2.setObjectName("input2")
        self.comboBox_2 = QtWidgets.QComboBox(self.centralwidget)
        self.comboBox_2.setGeometry(QtCore.QRect(20, 100, 31, 22))
        self.comboBox_2.setObjectName("comboBox_2")
        self.comboBox_2.addItem("")
        self.comboBox_2.addItem("")
        self.comboBox_2.addItem("")
        self.comboBox_2.addItem("")
        self.comboBox_2.addItem("")
        self.input3 = QtWidgets.QLineEdit(self.centralwidget)
        self.input3.setGeometry(QtCore.QRect(60, 100, 113, 20))
        self.input3.setObjectName("input3")
        self.comboBox_3 = QtWidgets.QComboBox(self.centralwidget)
        self.comboBox_3.setGeometry(QtCore.QRect(20, 130, 31, 22))
        self.comboBox_3.setObjectName("comboBox_3")
        self.comboBox_3.addItem("")
        self.comboBox_3.addItem("")
        self.comboBox_3.addItem("")
        self.comboBox_3.addItem("")
        self.comboBox_3.addItem("")
        self.input4 = QtWidgets.QLineEdit(self.centralwidget)
        self.input4.setGeometry(QtCore.QRect(60, 130, 113, 20))
        self.input4.setObjectName("input4")
        self.comboBox_ANS = QtWidgets.QComboBox(self.centralwidget)
        self.comboBox_ANS.setGeometry(QtCore.QRect(20, 190, 31, 22))
        self.comboBox_ANS.setObjectName("comboBox_ANS")
        self.comboBox_ANS.addItem("")
        self.comboBox_ANS.addItem("")
        self.comboBox_ANS.addItem("")
        self.comboBox_ANS.addItem("")
        self.comboBox_ANS.addItem("")
        self.lineEdit_result = QtWidgets.QLineEdit(self.centralwidget)
        self.lineEdit_result.setGeometry(QtCore.QRect(60, 190, 113, 20))
        self.lineEdit_result.setObjectName("lineEdit_result")
        self.calcbtn = QtWidgets.QPushButton(self.centralwidget)
        self.calcbtn.setGeometry(QtCore.QRect(110, 160, 75, 23))
        self.calcbtn.setObjectName("calcbtn")
        ##########################################################
        self.calcbtn.clicked.connect(self.event)
        #########################################################
        self.clrbtn = QtWidgets.QPushButton(self.centralwidget)
        self.clrbtn.setGeometry(QtCore.QRect(20, 160, 75, 23))
        self.clrbtn.setObjectName("clrbtn")
        self.label = QtWidgets.QLabel(self.centralwidget)
        self.label.setGeometry(QtCore.QRect(20, 10, 81, 16))
        self.label.setObjectName("label")
        MainWindow.setCentralWidget(self.centralwidget)

        self.retranslateUi(MainWindow)
        self.comboBox_1.setCurrentIndex(1)
        self.comboBox_2.setCurrentIndex(2)
        self.comboBox_3.setCurrentIndex(3)
        self.comboBox_ANS.setCurrentIndex(4)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "Mechanics"))
        self.comboBox.setItemText(0, _translate("MainWindow", "V"))
        self.comboBox.setItemText(1, _translate("MainWindow", "U"))
        self.comboBox.setItemText(2, _translate("MainWindow", "a"))
        self.comboBox.setItemText(3, _translate("MainWindow", "t"))
        self.comboBox.setItemText(4, _translate("MainWindow", "S"))
        self.comboBox_1.setItemText(0, _translate("MainWindow", "V"))
        self.comboBox_1.setItemText(1, _translate("MainWindow", "U"))
        self.comboBox_1.setItemText(2, _translate("MainWindow", "a"))
        self.comboBox_1.setItemText(3, _translate("MainWindow", "t"))
        self.comboBox_1.setItemText(4, _translate("MainWindow", "S"))
        self.comboBox_2.setItemText(0, _translate("MainWindow", "V"))
        self.comboBox_2.setItemText(1, _translate("MainWindow", "U"))
        self.comboBox_2.setItemText(2, _translate("MainWindow", "a"))
        self.comboBox_2.setItemText(3, _translate("MainWindow", "t"))
        self.comboBox_2.setItemText(4, _translate("MainWindow", "S"))
        self.comboBox_3.setItemText(0, _translate("MainWindow", "V"))
        self.comboBox_3.setItemText(1, _translate("MainWindow", "U"))
        self.comboBox_3.setItemText(2, _translate("MainWindow", "a"))
        self.comboBox_3.setItemText(3, _translate("MainWindow", "t"))
        self.comboBox_3.setItemText(4, _translate("MainWindow", "S"))
        self.comboBox_ANS.setItemText(0, _translate("MainWindow", "V"))
        self.comboBox_ANS.setItemText(1, _translate("MainWindow", "U"))
        self.comboBox_ANS.setItemText(2, _translate("MainWindow", "a"))
        self.comboBox_ANS.setItemText(3, _translate("MainWindow", "t"))
        self.comboBox_ANS.setItemText(4, _translate("MainWindow", "S"))
        self.calcbtn.setText(_translate("MainWindow", "SOLVE"))
        self.clrbtn.setText(_translate("MainWindow", "CLEAR"))
        self.label.setText(_translate("MainWindow", "MECHANICS"))


if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)

    MainWindow = QtWidgets.QMainWindow()

    ui = Ui_MainWindow()

    ui.setupUi(MainWindow)

    MainWindow.show()

    sys.exit(app.exec_())

I expect that, when I clicked the calculate button, the quadratic equation should be solved.

Your question doesn't have exact input. But as my understanding, If you change the selection of comboBox then you need the selected text to be displayed on the QLineEdit right?

class DisplayText(QMainWIndow):
    def __init__(self, parent=None):
        super(DisplayText, self).__init__(parent):

        self.combo = QComboBox(self)
        list = ['a','b','c','d','e']
        self.combo.addItems(list)
        self.combo.currentIndexChanged.connect(self.changeText)
        self.text = QLineEdit(self)
        self.show()

    def changeText(self, index):
        self.text.setText(self.combo.itemText(index))

This example will work for your question I think

You need to use QDoubleSpinBox instead of LineEdit .

The QDoubleSpinBox class provides a spin box widget that takes doubles.

Your example might look something like this:

import sys
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtCore import *
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *


class MyWin(QMainWindow):
    def __init__(self):
        super().__init__()   

        self.V, self.U, self.t, self.a = 0, 0, 0, 0

        centralWidget = QtWidgets.QWidget()
        self.setCentralWidget(centralWidget)

        self.label   = QLabel("MECHANICS")

        self.calcbtn = QPushButton("SOLVE")
        self.calcbtn.clicked.connect(self.onCalcbtn)
        self.clrbtn  = QPushButton("CLEAR")
        self.clrbtn.clicked.connect(self.onClrbtn)

        self.labelResult = QLabel()

        self.spinBox1 = QDoubleSpinBox()
        self.spinBox1.setMinimum(-2.3)
        self.spinBox1.setMaximum(12)
        self.spinBox1.setValue(4.4)
        self.spinBox1.setSingleStep(0.02)
        self.spinBox1.valueChanged.connect(self.valueChanged_V)

        self.spinBox2 = QDoubleSpinBox()
        # ... see self.spinBox1
        self.spinBox2.valueChanged.connect(self.valueChanged_U)
        self.spinBox3 = QDoubleSpinBox()
        # ... see self.spinBox1
        self.spinBox3.valueChanged.connect(self.valueChanged_t)
        self.spinBox4 = QDoubleSpinBox()
        # ... see self.spinBox1
        self.spinBox4.valueChanged.connect(self.valueChanged_a)

        formlayout   = QFormLayout()
        formlayout.addRow(QLabel("V"), self.spinBox1)
        formlayout.addRow(QLabel("U"), self.spinBox2)
        formlayout.addRow(QLabel("t"), self.spinBox3)
        formlayout.addRow(QLabel("a"), self.spinBox4)
        formlayout.addRow(QLabel("Result"), self.labelResult)

        layH = QHBoxLayout()
        layH.addWidget(self.clrbtn)
        layH.addWidget(self.calcbtn)

        layout = QVBoxLayout(centralWidget)
        layout.addWidget(self.label)
        layout.addLayout(formlayout)
        layout.addLayout(layH)

    def valueChanged_V(self):
        self.V = self.spinBox1.value()
    def valueChanged_U(self):
        self.U = self.spinBox2.value()
    def valueChanged_t(self):
        self.t = self.spinBox3.value()
    def valueChanged_a(self):
        self.a = self.spinBox4.value()

    def onClrbtn(self):
        self.spinBox1.setValue(0)
        self.spinBox2.setValue(0)
        self.spinBox3.setValue(0)
        self.spinBox4.setValue(0)
        self.V, self.U, self.t, self.a = 0, 0, 0, 0
        self.labelResult.setText("") 

    def onCalcbtn(self):
        formulars = "V + U + t + a = {:,.4f}".format(self.V + self.U + self.t + self.a)
        self.labelResult.setText(formulars)    

      # get value of the selected combobox data
#        V = float(self.input1.text())
#        U = float(self.input2.text())
#        t = float(self.input3.text())
#        a = float(self.input4.text())
#        #conditions
#        #if u,t,a are given, use this formulars
#        V = U + a*t
#        S = U*t + (a*t**2)/2
#        t = (V - U)/a        
#        #if u,a,s are given, 
#        V =(U**2 + 2*a*S)**0.5
#        S = (V**2 - U**2)/2*a 
#        #set the selected combobox result
#        self.lineEdit_result.setText        


if __name__=="__main__": 
    import sys 
    app = QtWidgets.QApplication(sys.argv)    
#    MainWindow = QtWidgets.QMainWindow()
#    ui = Ui_MainWindow()
#    ui.setupUi(MainWindow)
#    MainWindow.show()
    myapp = MyWin()
    myapp.show()
    sys.exit(app.exec_())

在此处输入图片说明

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM