Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/347.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 PyQt。如何将函数值转换为lineEdit?请帮我找到更好的方法_Python_Pyqt - Fatal编程技术网

Python PyQt。如何将函数值转换为lineEdit?请帮我找到更好的方法

Python PyQt。如何将函数值转换为lineEdit?请帮我找到更好的方法,python,pyqt,Python,Pyqt,我想创建一个简单的程序(在QtDesigner中),在单击按钮时执行一个函数,并在LineEdit中显示该函数的值。 这是我的代码: class MyForma1(object): def AddWidgets1(self, Form): Form.setObjectName(_fromUtf8("Form")) Form.resize(613, 545) self.pushButton = QtGui.QPushButton(Form)

我想创建一个简单的程序(在QtDesigner中),在单击按钮时执行一个函数,并在LineEdit中显示该函数的值。 这是我的代码:

class MyForma1(object):
    def AddWidgets1(self, Form):
        Form.setObjectName(_fromUtf8("Form"))
        Form.resize(613, 545)
        self.pushButton = QtGui.QPushButton(Form)
        self.pushButton.setGeometry(QtCore.QRect(244, 352, 111, 51))
        self.pushButton.setObjectName(_fromUtf8("pushButton"))
        self.lineEdit = QtGui.QLineEdit(Form)
        self.lineEdit.setGeometry(QtCore.QRect(242, 290, 111, 20))
        self.lineEdit.setObjectName(_fromUtf8("lineEdit"))
        self.retranslateUi(Form)

        QtCore.QObject.connect(self.pushButton, QtCore.SIGNAL(_fromUtf8("clicked()")), Form.changeText)

    def retranslateUi(self, Form):
        self.pushButton.setText(_translate("Form", "Click me", None))
        self.lineEdit.setText(_translate("Form", "functionvalue", None))

class MyForma2(QtGui.QDialog, MyForma1):
    def __init__(self, z11=0):
        QtGui.QDialog.__init__(self)
        self.AddWidgets1(self)
        self.z = z11

    def myfunc1(self):
        self.z+=1

    def changeText(self):
        self.myfunc1()
        self.lineEdit.setText(str(self.z))

if __name__ == "__main__":
    import sys
    app = QtGui.QApplication(sys.argv)
    Forma = MyForma2()
    Forma.show()
    sys.exit(app.exec_())
实际上,它很好用,但我不喜欢它的制作方式,我想把它做得更精致。这里的问题是,按钮同时“执行”函数和值转换。 我认为如果按钮只执行一个函数会更好,另外,还有一个功能会不断地将此函数的值从按钮分别转换为LineEdit。例如,可能存在这样一种情况,即需要持续监控的功能值不仅会受到按钮的影响,还会受到一些其他事件的影响(例如:来自COM端口的输入信号)。在这种情况下,最好在每次功能更改时发出信号,而不仅仅是在按下按钮时。

检查此示例:

#!/usr/bin/env python
#-*- coding:utf-8 -*-

#---------
# IMPORT
#---------
from PyQt4 import QtGui, QtCore

#---------
# MAIN
#---------
class MyWindow(QtGui.QWidget):
    valueChanged  = QtCore.pyqtSignal(int)

    def __init__(self, parent=None):
        super(MyWindow, self).__init__(parent)

        self.value = 0

        self.pushButtonAdd = QtGui.QPushButton(self)
        self.pushButtonAdd.setText("Add!")
        self.pushButtonAdd.clicked.connect(self.on_pushButtonAdd_clicked)

        self.pushButtonSubtract = QtGui.QPushButton(self)
        self.pushButtonSubtract.setText("Subtract!")
        self.pushButtonSubtract.clicked.connect(self.on_pushButtonSubtract_clicked)

        self.lineEditValue = QtGui.QLineEdit(self)
        self.lineEditValue.setText(str(self.value))

        self.layoutVertical = QtGui.QVBoxLayout(self)
        self.layoutVertical.addWidget(self.pushButtonAdd)
        self.layoutVertical.addWidget(self.pushButtonSubtract)
        self.layoutVertical.addWidget(self.lineEditValue)

    @QtCore.pyqtSlot()
    def on_pushButtonAdd_clicked(self):
        self.valueChanged.emit(1)

    @QtCore.pyqtSlot()
    def on_pushButtonSubtract_clicked(self):
        self.valueChanged.emit(-1)

    def setValue(self, value):
        self.value += value
        self.lineEditValue.setText(str(self.value))

if __name__ == "__main__":
    import sys

    app = QtGui.QApplication(sys.argv)
    app.setApplicationName('MyWindow')

    main = MyWindow()
    main.resize(333, 111)
    main.valueChanged.connect(main.setValue)
    main.show()

    sys.exit(app.exec_())
在本例中,要手动更改值,可以调用
main.setValue(34)

签出此示例:

#!/usr/bin/env python
#-*- coding:utf-8 -*-

#---------
# IMPORT
#---------
from PyQt4 import QtGui, QtCore

#---------
# MAIN
#---------
class MyWindow(QtGui.QWidget):
    valueChanged  = QtCore.pyqtSignal(int)

    def __init__(self, parent=None):
        super(MyWindow, self).__init__(parent)

        self.value = 0

        self.pushButtonAdd = QtGui.QPushButton(self)
        self.pushButtonAdd.setText("Add!")
        self.pushButtonAdd.clicked.connect(self.on_pushButtonAdd_clicked)

        self.pushButtonSubtract = QtGui.QPushButton(self)
        self.pushButtonSubtract.setText("Subtract!")
        self.pushButtonSubtract.clicked.connect(self.on_pushButtonSubtract_clicked)

        self.lineEditValue = QtGui.QLineEdit(self)
        self.lineEditValue.setText(str(self.value))

        self.layoutVertical = QtGui.QVBoxLayout(self)
        self.layoutVertical.addWidget(self.pushButtonAdd)
        self.layoutVertical.addWidget(self.pushButtonSubtract)
        self.layoutVertical.addWidget(self.lineEditValue)

    @QtCore.pyqtSlot()
    def on_pushButtonAdd_clicked(self):
        self.valueChanged.emit(1)

    @QtCore.pyqtSlot()
    def on_pushButtonSubtract_clicked(self):
        self.valueChanged.emit(-1)

    def setValue(self, value):
        self.value += value
        self.lineEditValue.setText(str(self.value))

if __name__ == "__main__":
    import sys

    app = QtGui.QApplication(sys.argv)
    app.setApplicationName('MyWindow')

    main = MyWindow()
    main.resize(333, 111)
    main.valueChanged.connect(main.setValue)
    main.show()

    sys.exit(app.exec_())

在本例中,要手动更改值,您可以调用
main.setValue(34)

您的问题是什么?似乎您了解信号/插槽机制,因此您可以实现您的方法!在类(
self.z
)中生成更新变量的函数,并在函数末尾发出自定义信号,该信号调用更新lineedit的函数。您有什么问题?似乎您了解信号/插槽机制,因此您可以实现您的方法!使函数更新类中的变量(
self.z
),并在函数末尾发出自定义信号,该信号调用更新lineedit的函数。