Python 全球名称';变量名称';没有定义
我正在编写我的第一个Python脚本,得到一个错误Python 全球名称';变量名称';没有定义,python,python-2.7,Python,Python 2.7,我正在编写我的第一个Python脚本,得到一个错误NameError:global name'board'未定义。python为什么抛出这个错误,以及如何修复它 class Screen(QtGui.QMainWindow): def __init__(self): super(Screen, self).__init__() self.initUI() def toggleLED(self, pressed): sour
NameError:global name'board'未定义
。python为什么抛出这个错误,以及如何修复它
class Screen(QtGui.QMainWindow):
def __init__(self):
super(Screen, self).__init__()
self.initUI()
def toggleLED(self, pressed):
source = self.sender()
if self.LedOn:
source.setText('LED Off')
self.LedOn = 0
board.setHigh(13)
else:
source.setText('LED On')
self.LedOn = 1
board.setLow(13)
def main():
app = QtGui.QApplication(sys.argv)
screen = Screen()
board = Arduino('COM3')
sys.exit(app.exec_())
if __name__ == '__main__':
main()
名为
board
的变量是main()
的本地变量,在屏幕
类的实例中不可见
也许解决这个问题的最干净的方法是让Screen
的实例保留对board
的引用:
class Screen(QtGui.QMainWindow):
def __init__(self, board):
super(Screen, self).__init__()
self.board = board
self.initUI()
def toggleLED(self, pressed):
source = self.sender()
if self.LedOn:
source.setText('LED Off')
self.LedOn = 0
self.board.setHigh(13)
else:
source.setText('LED On')
self.LedOn = 1
self.board.setLow(13)
def main():
app = QtGui.QApplication(sys.argv)
board = Arduino('COM3')
screen = Screen(board)
sys.exit(app.exec_())
if __name__ == '__main__':
main()
名为
board
的变量是main()
的本地变量,在屏幕
类的实例中不可见
也许解决这个问题的最干净的方法是让Screen
的实例保留对board
的引用:
class Screen(QtGui.QMainWindow):
def __init__(self, board):
super(Screen, self).__init__()
self.board = board
self.initUI()
def toggleLED(self, pressed):
source = self.sender()
if self.LedOn:
source.setText('LED Off')
self.LedOn = 0
self.board.setHigh(13)
else:
source.setText('LED On')
self.LedOn = 1
self.board.setLow(13)
def main():
app = QtGui.QApplication(sys.argv)
board = Arduino('COM3')
screen = Screen(board)
sys.exit(app.exec_())
if __name__ == '__main__':
main()
在切换的
中有几行引用了名为board
的变量,但是board
从未定义在该方法范围内可访问的任何地方
您可能希望在创建board
对象时将其传递给屏幕
,以便屏幕
实例具有对该对象的引用。有很多方法可以做到这一点;如果一块电路板对屏幕的功能至关重要,我会将它放在初始值设定项中:
def __init__(self, board):
super(Screen, self).__init__()
self.initUI()
self.board = board
然后,您可以在需要访问该实例的任何地方(当然是在屏幕类中)引用self.board
。您在中有几行被切换的引用了一个名为board
的变量,但是board
从未定义在该方法范围内可访问的任何地方
您可能希望在创建board
对象时将其传递给屏幕
,以便屏幕
实例具有对该对象的引用。有很多方法可以做到这一点;如果一块电路板对屏幕的功能至关重要,我会将它放在初始值设定项中:
def __init__(self, board):
super(Screen, self).__init__()
self.initUI()
self.board = board
然后,您可以在需要访问该实例的任何位置(当然是在屏幕中的类中)参考self.board