简体   繁体   English

如何在PyQt5中将QComboBox与QlineEdit连接

[英]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. 我正在开发PyQt5桌面GUI应用程序,但是尝试连接我的comboBox,以便更改combobox中的变量会更改QlineEdit中的值,请提供任何帮助。 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? 但是据我的理解,如果您更改comboBox的选择,那么您需要将所选文本显示在QLineEdit上吗?

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 . 您需要使用QDoubleSpinBox而不是LineEdit

The QDoubleSpinBox class provides a spin box widget that takes doubles. QDoubleSpinBox类提供了一个旋转框小部件,它需要加倍。

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

在此处输入图片说明

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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