Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 全球名称';变量名称';没有定义_Python_Python 2.7 - Fatal编程技术网

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

我正在编写我的第一个Python脚本,得到一个错误
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