Python错误:全局范围内未声明全局声明的变量

时间:2019-04-19 17:12:36

标签: python variables global-variables

我对python还是很陌生,我试图制作一个简单的GUI程序。 但是,我遇到了一个“问题”,恰好是一个警告,它说: 未在全局范围(Python(未定义变量,未全局定义))中定义'm'。

我知道,如果要在该函数范围之外访问它,则需要在一个函数内部声明一个var全局变量。尽管我没有在函数外使用这个新创建的变量,但如果不全局声明它,我的程序只会显示GUI不到一秒钟,然后将其关闭。

import sys
from PyQt5.QtWidgets import QApplication, QWidget

def show():
    global m
    m = QWidget()
    m.setWindowTitle("Testing this app")
    m.show()

MYAPP = QApplication(sys.argv)
show()
MYAPP.exec_()

您能解释一下为什么会这样吗?预先感谢!

2 个答案:

答案 0 :(得分:0)

在show()使用m之前,还应该在全局范围中声明m。您可以通过在调用show()之前设置m=None来实现此目的。

答案 1 :(得分:0)

global告诉python在全局名称空间中查找具有此名称的变量,并将其包含在本地名称空间中。这意味着它必须首先存在于全局名称空间中。

import sys
from PyQt5.QtWidgets import QApplication, QWidget

m = None  # variable must exist in global namespace first

def show():
    global m  # this creates a local m that is linked to the global m
    m = QWidget()
    m.setWindowTitle("Testing this app")
    m.show()

MYAPP = QApplication(sys.argv)
show()
MYAPP.exec_()