旋转框值反映在由 for 循环制作的另一个旋转框中

问题描述

当我尝试更改第一个旋转框的值时,我使用 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()

[得到这个输出]]click_to_view_output

我想单独更改旋转框的值并单独更改get()值。

我需要改变的值应该显示在旋转框中,并且当我们get()旋转框值时应该打印相同的值。

解决方法

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()
,

您需要为每个动态更改文本变量 -

spin_num = 0
for prds in products:
     spin_num += 1
     def change():
          print(entry.get())
     entry = Spinbox(frm1,textvariable=f'{spin_num}',command=change)
     entry.pack()

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