按下按钮A打印在MainWindow()类范围定义之外声明的 myVariable 变量。
print '\n\t myVariable =', myVariable
链接到按钮B的类函数(方法)想要:
但是buttonB_func()失败,第一行抛出UnboundLocalError:
UnboundLocalError: local variable 'myVariable' referenced before assignment
除了知道如何修复它之外,首先找出为什么会发生这种情况会很有趣。 附:使用:
创建变量全局变量global myVariable
myVariable=10
没有帮助。
myVariable=10
class MainWindow(QtGui.QMainWindow):
def __init__(self):
super(MainWindow, self).__init__()
self.main_layout = QtGui.QVBoxLayout()
buttonA = QtGui.QPushButton("Button A")
buttonA.clicked.connect(self.buttonA_func)
self.main_layout.addWidget(buttonA)
buttonB = QtGui.QPushButton("Button B")
buttonB.clicked.connect(self.buttonB_func)
self.main_layout.addWidget(buttonB)
central_widget = QtGui.QWidget()
central_widget.setLayout(self.main_layout)
self.setCentralWidget(central_widget)
def buttonA_func(self):
print '\n\t\t\t myVariable =', myVariable, '\n'
def buttonB_func(self):
print '\n\t\t\t myVariable =', myVariable, '\n'
myVariable=11
print '\n\t\t\t myVariable =', myVariable, '\n'
if __name__ == '__main__':
app = QtGui.QApplication(sys.argv)
window = MainWindow()
window.resize(480, 320)
window.show()
sys.exit(app.exec_())
答案 0 :(得分:2)
在尝试使用变量之前,将global
放在方法体内。
答案 1 :(得分:0)
变量的位置在编译时确定。无论何时分配给变量(使用global
或nonlocal
),此变量都将成为该范围的本地变量(快速存储或取消存储)。在按钮A中,您不能分配给它,因此它可以工作。在按钮B中,您可以为其分配,因此它是本地的并且失败。正如@Ben指出的那样,如果你将global myVariable
作为buttonB_func
的第一行,这应该可以解决您的问题。但问题是:为什么要使用全局变量?
正如@AdamCushner指出的那样,你可以让你的变量成为你的类的成员。这些方面的东西:
class MainWindow(QtGui.QMainWindow):
myVariable=10
def __init__(self):
...
def buttonA_func(self):
print '\n\t\t\t myVariable =', MainWindow.myVariable, '\n'
def buttonB_func(self):
print '\n\t\t\t myVariable =', MainWindow.myVariable, '\n'
MainWindow.myVariable=11
print '\n\t\t\t myVariable =', MainWindow.myVariable, '\n'