使用for循环制作的另一个微调框中反映的微调框值

3

我使用for循环创建了旋转框,当我尝试更改第一个旋转框的值时,它也会反映在另一个旋转框中。 我该如何纠正它。提前感谢您的答案。

 from tkinter import *
 win =Tk()
 frm1 = Frame(win,bg='sky blue')
 frm1.pack(fill='both',expand=1)
 products = [1,2,3,4,5]
 for prds in products:
     def change():
         print(entry11_cart.get())
     entry11_cart = Spinbox(frm1, textvariable=1, from_=1, to=10, command=change)
     entry11_cart.pack()
 win.mainloop()

[得到此输出]

点击查看输出

我想单独更改旋转框的值并分别使用get()获取各自的值。

我需要更改的值显示在旋转框中,并在获取旋转框值时打印相同的值。


1
所以你想要多个Spinbox以某种方式链接在一起,其中更改其中一个会更改另一个?看看textvariable参数应该是什么(提示:是一个tkinter变量)。 - TheLizzard
不,你误解了,我想使用for循环创建多个旋转框,但它们不应该相互链接,每个框的值应该单独更改。 - Venkatesh
2个回答

1
from tkinter import *
w=Tk()
frm1 = Frame(w,bg='sky blue')
frm1.pack(fill='both',expand=1)
#the names of spinbox
l=["name_1","name_2"]
e=["apple","pine"]
#don't use for i in l
#it might assign all spinboxes' name to "i"
for i in range(len(l)):
    def change(i):
        print(l[i].get())
    e[i]=StringVar()
    l[i]=Spinbox(frm1, textvariable=e[i], from_=1, to=10, command=lambda i=i: change(i))
    l[i].pack()
    print(l[i])
w.mainloop()

不,它只改变了微调框的值。但我希望在每次单击上下按钮时都打印出原始值。 - Venkatesh
@Venkatesh 我更新了这个答案。现在应该可以工作了。你能再试一次吗? - TheLizzard
@TheLizzard,没错,它可以工作。此外,您可以添加print(l[i],':',li[i].get())来证明旋转框是不同的。 - user15801675

0
你需要动态地为每个文本变量进行更改。
spin_num = 0
for prds in products:
     spin_num += 1
     def change():
          print(entry.get())
     entry = Spinbox(frm1, textvariable=f'{spin_num}', from_=1, to=10, command=change)
     entry.pack()

这将为每个spin_box更改文本变量的值。 这将起作用。


1
这段代码不起作用是因为和这个一样的原因。change函数使用了最后一个条目。 - TheLizzard
1
此外,textvariable 参数是用于 tkinter 变量,如 IntVarStringVarDoubleVarBooleanVar,而不是字符串。 - TheLizzard

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接