我的变量在功能上不会改变

时间:2018-02-03 05:40:34

标签: python tkinter

我的变量没有改变,我知道它没有改变因为" 1"打印到控制台。 当我按下按钮时,我试图使标签增加。但是,当我按下按钮时,变量保持为1。 我究竟做错了什么? 我已经在网上寻找答案,但我找不到一个我能理解的答案。

num = 0
import tkinter
box = tkinter.Tk()
v = tkinter.StringVar()
labels = tkinter.Label(box, textvariable = v)
labels.pack()

def numberz(num,v):
    num += 1
    v.set(num)
    print(num)

class MainWindow():
     box.title("My Stupid Program")
     buddon = tkinter.Button(box, text='PRESS ME', command = lambda:numberz(num,v))
     buddon.pack()

box.mainloop()

1 个答案:

答案 0 :(得分:1)

num = 0
import tkinter
box = tkinter.Tk()
v = tkinter.StringVar()
labels = tkinter.Label(box, textvariable = v)
labels.pack()

def numberz(num,v):
    num += 1
    v.set(num)
    print(num)

class MainWindow():
     box.title("My Stupid Program")
     buddon = tkinter.Button(box, text='PRESS ME', command = lambda:numberz(num,v))
     buddon.pack()

box.mainloop()

您正在更改参数 num而不是全球变量num

要更改全局,您需要专门引用它。请注意numlambda未在global num中传递,现在您的函数中有num = 0 import tkinter box = tkinter.Tk() v = tkinter.StringVar() labels = tkinter.Label(box, textvariable = v) labels.pack() def numberz(v): global num num += 1 v.set(num) print(num) class MainWindow(): box.title("My Stupid Program") buddon = tkinter.Button(box, text='PRESS ME', command = lambda:numberz(v)) buddon.pack() box.mainloop()

map

在任何情况下,使用全局变量都应限于非常具体的情况,而不是一般用途。