【问题标题】:TypeError: changeText() takes exactly 2 arguments (0 given)TypeError:changeText() 正好采用 2 个参数(给定 0)
【发布时间】:2013-07-22 17:10:55
【问题描述】:

我正在使用 python (2.7.5) 和 pyqt (4.8.4),我想创建一个简单的 gui 程序,每次单击按钮时都会在“lineEdit”对象中显示函数的值(增量)。 我的代码:

z=0
def myfunc1():
        global z
        z=z+1
        print (z)


def changeText(self, event):
        lineEdit.setText(str(z))


class Ui_Form(object):
    def setupUi(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.QMetaObject.connectSlotsByName(Form)
        QtCore.QObject.connect(self.pushButton, QtCore.SIGNAL(_fromUtf8("clicked()")), myfunc1)
        QtCore.QObject.connect(self.pushButton, QtCore.SIGNAL("clicked()"), changeText)


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


if __name__ == "__main__":
    import sys
    app = QtGui.QApplication(sys.argv)
    Form = QtGui.QWidget()
    ui = Ui_Form()
    ui.setupUi(Form)
    Form.show()
    sys.exit(app.exec_())

程序开始工作,但点击按钮后,它给出了错误消息: TypeError: changeText() 只需要 2 个参数(给定 0) 据我了解,我应该以某种方式定义这两个参数:(自我,事件)..但是如何?

【问题讨论】:

    标签: python pyqt


    【解决方案1】:

    这是一个工作代码:

    from PyQt4 import QtCore, QtGui
    
    try:
        _fromUtf8 = QtCore.QString.fromUtf8
    except AttributeError:
        def _fromUtf8(s):
            return s
    
    try:
        _encoding = QtGui.QApplication.UnicodeUTF8
        def _translate(context, text, disambig):
            return QtGui.QApplication.translate(context, text, disambig, _encoding)
    except AttributeError:
        def _translate(context, text, disambig):
            return QtGui.QApplication.translate(context, text, disambig)
    
    class Ui_Form(object):
        def setupUi(self, Form):
            Form.setObjectName(_fromUtf8("Dialog"))
            Form.resize(151, 67)
            self.verticalLayout = QtGui.QVBoxLayout(Form)
            self.verticalLayout.setObjectName(_fromUtf8("verticalLayout"))
            self.pushButton = QtGui.QPushButton(Form)
            self.pushButton.setObjectName(_fromUtf8("pushButton"))
            self.verticalLayout.addWidget(self.pushButton)
            self.lineEdit = QtGui.QLineEdit(Form)
            self.lineEdit.setReadOnly(True)
            self.lineEdit.setObjectName(_fromUtf8("lineEdit"))
            self.verticalLayout.addWidget(self.lineEdit)
    
            self.retranslateUi(Form)
            QtCore.QObject.connect(self.pushButton, QtCore.SIGNAL(_fromUtf8("clicked()")), Form.changeText)
    
    
        def retranslateUi(self, Form):
            Form.setWindowTitle(_translate("Form", "Form", None))
            self.pushButton.setText(_translate("Form", "Click me", None))
            self.lineEdit.setPlaceholderText(_translate("Form", "functionvalue", None))
    
    
    class MyForm(QtGui.QDialog, Ui_Form):
        def __init__(self, z=0):
            QtGui.QDialog.__init__(self)
            self.setupUi(self)
            self.z = z
    
        def myfunc1(self):
            self.z+=1
            print (self.z)
    
        def changeText(self):
            self.myfunc1()
            self.lineEdit.setText(str(self.z))
    
    
    if __name__ == "__main__":
        import sys
        app = QtGui.QApplication(sys.argv)
        Form = MyForm()
        Form.show()
        sys.exit(app.exec_())
    

    【讨论】:

      【解决方案2】:

      你给了changetext() self 参数,即使它不在UI_form 类中,所以它不需要 self

      那么当你调用它时,你没有在这一行给出任何参数:

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

      它期望用它调用参数,因为在定义它时你给了它一个self 和一个event 参数

      【讨论】:

      • 好的,谢谢,但我不能简单地删除这些参数,因为那时会出现另一个错误......(未定义 GlobalName 'LineEdit')。那么,也许我应该把这个函数放在 UI_form 中?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-06
      • 2016-01-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多