Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在PyQt5中将QComboBox与QlineEdit连接_Python_Pyqt5 - Fatal编程技术网

Python 如何在PyQt5中将QComboBox与QlineEdit连接

Python 如何在PyQt5中将QComboBox与QlineEdit连接,python,pyqt5,Python,Pyqt5,我正在开发一个PyQt5桌面GUI应用程序,但我正在尝试连接我的comboBox,以便更改comboBox中的变量会更改QlineEdit中的值,请提供任何帮助。谢谢 我试过几个代码,但它们的语法似乎不一致。下面是我的代码 from PyQt5 import QtCore, QtGui, QtWidgets class Ui_MainWindow(object): def event(self): # get value of the selected combobox

我正在开发一个PyQt5桌面GUI应用程序,但我正在尝试连接我的comboBox,以便更改comboBox中的变量会更改QlineEdit中的值,请提供任何帮助。谢谢

我试过几个代码,但它们的语法似乎不一致。下面是我的代码

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

我希望,当我单击“计算”按钮时,二次方程应该得到解。

您的问题没有确切的输入。但据我所知,如果更改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))

这个例子可以解决您的问题,我认为您需要使用
QDoubleSpinBox
行进行编辑

QDoubleSpinBox类提供了一个双精度的Spinbox小部件

您的示例可能如下所示:

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

在事件定义中,lineEdit设置为setText。。。它将给出错误。。。setText必须被赋值为“self.combo.itemText(index)”从组合框中传递该索引的值。