dishan 发表于 2021-12-1 14:45:34

tkinter的v.append(IntVar)解释

大家好: 2018版0基础学习PYTHON中的67课有关TKINTER的用for循环建立CheckButton这一块。有个地方不知道怎么解释:


from tkinter import *
root=Tk()
girls=["稀释","貂蝉","王昭君","杨玉环"]
v=[]
for girl in girls:
    v.append(IntVar())
    b=Checkbutton(root,text=girl,variable=v[-1])
    b.pack()
root.mainloop()

就是上面:
1.for循环内v.append(IntVar())句代码我不明白什么意思?好像和其它的函数没有关系似的。
2.为什么不把上面的列表直接搞成v= 或者v=。
请解释一下,谢谢啊 py友们!




from tkinter import *

root=Tk()
girls=["稀释","貂蝉","王昭君","杨玉环"]
v=
for girl in girls:
    # v.append(IntVar())                        #这样弄不行,选一个就全选了。
    b=Checkbutton(root,text=girl,variable=v[-1])
    b.pack()
root.mainloop()         


from tkinter import *

root=Tk()
girls=["稀释","貂蝉","王昭君","杨玉环"]
v=
for girl in girls:
    v.append(IntVar())                         #但是这样确可以,
    b=Checkbutton(root,text=girl,variable=v[-1])
    b.pack()
root.mainloop()            


suchocolate 发表于 2021-12-1 15:55:48

本帖最后由 suchocolate 于 2021-12-1 16:02 编辑

from tkinter import *

#type 1
root=Tk()
girls=["稀释","貂蝉","王昭君","杨玉环"]
v=
for girl in girls:
    # v.append(IntVar())
    b=Checkbutton(root,text=girl,variable=v[-1])   # 因为index始终是-1,所以用的都是v的最后一个元素,所以选一个就都全选了,前3个变量没有用到。
    b.pack()
root.mainloop()         


#type 2
v=   #应该像教程里那样,v初始化为空。
for girl in girls:
    v.append(IntVar())#虽然这样可以,但是v的前4个变量就浪费了,应该像教程里那样,v初始化为空。
    b=Checkbutton(root,text=girl,variable=v[-1])
    b.pack()
root.mainloop()

suchocolate 发表于 2021-12-1 16:02:00

python内一切皆对象,列表可以由我们常见的对象组成,也可以有其他类型的对象组成。v就是由IntVar变量对象组成。
IntVar():创建整数型变量
v.append(IntVar()):创建整数变量,添加到v列表中。因为最循环里,所以每次循环都会新建一个变量,加到列表里,所以v[-1]每次都是最新创建的变量。

dishan 发表于 2021-12-2 09:18:46

from tkinter import *

root=Tk()
girls=["稀释","貂蝉","王昭君","杨玉环"]
# v=   #这一行注销也能运行
for girl in girls:
    v=IntVar()                              #这样也可以(我觉得比小甲鱼的方法好),但这是什么原理。这一行代码的原理。
    b=Checkbutton(root,text=girl,variable=v)
    b.pack()
root.mainloop()


root.mainloop()

dishan 发表于 2021-12-2 09:19:17

from tkinter import *

root=Tk()
girls=["稀释","貂蝉","王昭君","杨玉环"]
v=IntVar()                                    #这一行选一个就全选了。
for girl in girls:
    #v=IntVar()                              #但把这一行注销就不行了。为什么
    b=Checkbutton(root,text=girl,variable=v)
    b.pack()
root.mainloop()



root.mainloop()
页: [1]
查看完整版本: tkinter的v.append(IntVar)解释