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

标签 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()

最佳答案

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 中传递,而现在您的函数中有一个全局 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()

无论如何,使用全局变量应该仅限于非常特定的情况,而不是通用的。

关于python - 我的变量在函数中不会改变,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48594317/

相关文章:

python - Python 中不区分大小写的正则表达式

python - Pelican:用逗号连接标签

python - 如何在GPU设备上运行带权重的tensorflow softmax_cross_entropy?

python - pymunk + tkinter : How to get ball to move to left or right with pymunk?

python - 使用 Tkinter 文本编辑器突出显示错误

python - 与 Tkinter 应用程序一起运行循环

python - transient 输入窗口

python - “NoneType”对象在python小程序中没有属性 'get'

python - 无法使用 PlayBook 类运行 Ansible API

python - 如何使用 tkinter 在第二个窗口上创建 "go back Button"?