信号处理程序

时间:2016-12-07 08:01:36

标签: python pyqt4 signals-slots nameerror

以下是该计划:

import sys
from PyQt4 import QtGui, QtCore

class Example(QtGui.QWidget):

    def __init__(self):
        super(Example, self).__init__()         
        self.initUI()

    def initUI(self):

        self.setGeometry(400, 250, 680, 400)
        self.setWindowTitle('Programme')

        texte = QtGui.QLabel('On connait :', self)
        texte.move(30, 50)

        i = QtGui.QCheckBox("i", self)
        i.move(30, 70)
        i.setToolTip("C'est l'angle d'incidence de l'onde.")
        i.stateChanged.connect(self.icoche)

        n1 = QtGui.QCheckBox("n1", self)
        n1.move(30, 90)
        n1.setToolTip("C'est l'indice de réfraction du premier milieu. Il correspond au quotient de la vitesse de la lumière dans ce milieu et de la célérité.")
        r = QtGui.QCheckBox("r", self)
        r.move(30, 110)
        r.setToolTip("C'est l'angle de réfraction de l'onde.")
        n2 = QtGui.QCheckBox("n2", self)
        n2.move(30, 130)
        n2.setToolTip("C'est l'indice de réfraction du second milieu. Il correspond au quotient de la vitesse de la lumière dans ce milieu et de la célérité.")

        algo = QtGui.QPushButton("Calculer", self)
        algo.resize(algo.sizeHint())
        algo.move(30, 160)
        algo.setEnabled(False)

        vali = QtGui.QLineEdit(self)
        vali.move(70, 70)
        vali.setEnabled(False)

        self.show()

    def icoche(self, state):

        if state == QtCore.Qt.Checked:
            vali.setEnabled(True)
        else :
            vali.setEnabled(False)


def main():
    app = QtGui.QApplication(sys.argv)
    ex = Example()
    sys.exit(app.exec_())


if __name__ == '__main__':
    main() 

但是当我检查i框时,它会返回以下错误:

  

NameError:未定义全局名称“vali”

我尝试self.vali代替vali,但它没有改变任何内容。哪里出错?

2 个答案:

答案 0 :(得分:2)

您需要在整个班级中使用self来将其用作类属性。你拥有它的方式只是在每个功能的范围内,而不是两者兼而有之。

    self.vali = QtGui.QLineEdit(self)
    self.vali.move(70, 70)
    self.vali.setEnabled(False)

    self.show()

def icoche(self, state):

    if state == QtCore.Qt.Checked:
        self.vali.setEnabled(True)
    else:
        self.vali.setEnabled(False)

答案 1 :(得分:0)

如果上面的答案对你没有帮助。我在这段代码中可以看到的只是缩进问题。您的函数未正确缩进您的类。在class Example(QtGui.QWidget):之后,您的所有代码都缺少一个“标签”。因此,函数中的每个self仅由一个函数识别