0

初めての Python スクリプトを作成していますが、エラーが発生しますNameError: global name 'board' is not defined。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()
4

2 に答える 2

5

呼び出された変数boardはローカルであり、クラスmain()のインスタンス内では表示されません。Screen

おそらく、これを解決する最もクリーンな方法は、 のインスタンスに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()
于 2013-09-20T16:39:05.760 に答える
1

toggleLEDという変数を参照する行がいくつかありますが、そのメソッドのスコープ内でアクセスできる場所には定義されてboardboardません。

インスタンスがオブジェクトへの参照を持つように、作成時にboardオブジェクトをに渡したいと思うでしょう。これを行う方法はたくさんあります。の機能にボードが不可欠な場合は、初期化子に入れます。ScreenScreenScreen

def __init__(self, board):
    super(Screen, self).__init__()
    self.initUI()
    self.board = board

次にself.board、そのインスタンスにアクセスする必要がある場所 (Screenもちろんクラス内) を参照できます。

于 2013-09-20T16:39:13.153 に答える