2016-12-07 6 views
0

Вот программа: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: global name 'vali' is not defined

Я пытался self.vali вместо vali, но это Безразлично» ничего не меняйте. Где ошибка?

+0

Прочитайте базовый учебник по использованию python о том, как использовать атрибуты в классах. – ekhumoro

ответ

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) 
0

Если ответ выше не помог вам. Все, что я вижу в этом коде, - это проблема с отступом. С вашим классом ваши функции неправильно отступы. С class Example(QtGui.QWidget): вам не хватает одной «вкладки». При этом каждый self в функциях распознается только одной функцией

+0

Это была просто проблема форматирования кода в вопросе, который теперь исправлен. – ekhumoro