我是初学者使用Tkinter模块进行一些非常基本的GUI编程。 我试过运行程序,我从其他网页复制了源代码。
from Tkinter import *
def sel():
selection = "You selected the option " + str(var.get())
label.config(text = selection)
root = Tk()
var = IntVar()
R1 = Radiobutton(root, text="Option 1", variable=var, value=1,
command=sel)
R1.pack( anchor = W )
R2 = Radiobutton(root, text="Option 2", variable=var, value=2,
command=sel)
R2.pack( anchor = W )
R3 = Radiobutton(root, text="Option 3", variable=var, value=3,
command=sel)
R3.pack( anchor = W)
label = Label(root)
label.pack()
root.mainloop()
我怀疑每当我们访问函数内的全局对象时,我们必须编写
global object_name
然后该函数正常工作,否则该函数会创建自己的局部变量副本。那么我们为什么不在函数sel()的定义中做同样的事情呢? 我尝试将以下语句添加到sel()的定义中?另外,
global label
global var
并运行该程序,但它对程序的运行没有任何影响。那是为什么?
答案 0 :(得分:2)
修改全局变量时只需要global
。
考虑以下示例:
myglobal = 'myglobal'
def test_global():
print myglobal
test_global()
myglobal #output
如果我们看一下字节码,我们看到变量myglobal
被加载为全局:
import dis
dis.dis(test_global)
2 0 LOAD_GLOBAL 0 (myglobal)
3 PRINT_ITEM
4 PRINT_NEWLINE
5 LOAD_CONST 0 (None)
8 RETURN_VALUE
但是,如果我们定义myglobal
,我们会看到myglobal
被加载为常量或局部变量。
import dis
def test_global():
myglobal = 'mylocal'
dis.dis(test_global)
2 0 LOAD_CONST 1 ('mylocal')
3 STORE_FAST 0 (myglobal)
6 LOAD_CONST 0 (None)
9 RETURN_VALUE
如果我们尝试修改myglobal
而不是简单地定义它:
myglobal += 'another string'
我们得到UnboundLocalError
,因为我们没有告诉Python变量myglobal
是全局的。试试这样:
global myglobal
myglobal += 'another string'
这样可以正常使用。