以下是该计划:
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
,但它没有改变任何内容。哪里出错?
答案 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
仅由一个函数识别