Tkinter IntVar() 的数学不工作?

Math with Tkinter IntVar()'s not working?

本质上,我在 python 中使用 Tkinter,以便在按下按钮时将 1 添加到变量。我有另一个变量等于我的第一个变量乘以 10。当我按下将一个添加到我的原始变量的按钮时,第二个变量 (x*10) 没有加倍。看看:

def add1():
    var1.set(var1.get() + 1)

def pringvar3()
    print(var3.get())

from tkinter import *
main = Tk()
button = Button(main, text="Add 1", command=add1)
button.pack()
button2 = Button(main, text="Print var3", command=printvar3)
button2.pack()

var1 = IntVar()
var1.set(1)
var2 = IntVar()
var2.set(10)
var3 = IntVar()
var3.set(var2.get() * var1.get())

这段代码有什么问题?当我单击按钮时,首先单击 1 然后单击 2,它仍将变量打印为 10。

您有一堆拼写错误和漏掉的冒号,但更重要的是您没有更改函数回调中的值。请记住,您只设置一次值,您永远不会真正重置它。

def printvar3():
    global var3
    var3.set(var2.get() * var1.get())
    print(var3.get())

tkinter IntVar 对象不会更新其他可能在某些时候使用过它们的值的对象,因此更改 var1 不会自动更新 var3 --你必须让它明确地发生。

这是一个基于您的代码的简单演示,其中添加了一个额外的按钮,在单击时执行此操作:

def add1():
    var1.set(var1.get() + 1)

def updatevar3():
    var3.set(var2.get() * var1.get())  # recalulate value

def printvar3():
    print(var3.get())

from tkinter import *

main = Tk()
button = Button(main, text="Add 1", command=add1)
button.pack()
button2 = Button(main, text="Update var3", command=updatevar3)
button2.pack()
button3 = Button(main, text="Print var3", command=printvar3)
button3.pack()

var1 = IntVar()
var1.set(1)
var2 = IntVar()
var2.set(10)
var3 = IntVar()
var3.set(var2.get() * var1.get())  # set initial value

main.mainloop()
print('done')