我的变量在函数中不会改变

2024-03-28 10:38:32 发布

您现在位置:Python中文网/ 问答频道 /正文

我的变量没有改变,我知道它没有改变,因为“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()

Tags: 答案importboxlabelstkinter标签按钮num
1条回答
网友
1楼 · 发布于 2024-03-28 10:38:32
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

要更改全局,需要特别引用它。注意num是如何在lambda中不传递的,现在函数中有了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()

在任何情况下,使用globals都应该限制在非常特定的情况下,而不是通用的。你知道吗

相关问题 更多 >