鱼C论坛

 找回密码
 立即注册
查看: 1017|回复: 4

tkinter的v.append(IntVar)解释

[复制链接]
发表于 2021-12-1 14:45:34 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
大家好: 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=[IntVar()] 或者v=[IntVar(),IntVar(),IntVar(),IntVar()]。
请解释一下,谢谢啊 py友们!




from tkinter import *

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


想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-12-1 15:55:48 | 显示全部楼层
本帖最后由 suchocolate 于 2021-12-1 16:02 编辑

from tkinter import *

#  type 1
root=Tk()
girls=["稀释","貂蝉","王昭君","杨玉环"]
v=[IntVar(),IntVar(),IntVar(),IntVar()]
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=[IntVar(),IntVar(),IntVar(),IntVar()]   #  应该像教程里那样,v初始化为空。
for girl in girls:
    v.append(IntVar())  #虽然这样可以,但是v的前4个变量就浪费了,应该像教程里那样,v初始化为空。
    b=Checkbutton(root,text=girl,variable=v[-1])
    b.pack()
root.mainloop()  
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-12-1 16:02:00 | 显示全部楼层
python内一切皆对象,列表可以由我们常见的对象组成,也可以有其他类型的对象组成。v就是由IntVar变量对象组成。
IntVar():创建整数型变量
v.append(IntVar()):创建整数变量,添加到v列表中。因为最循环里,所以每次循环都会新建一个变量,加到列表里,所以v[-1]每次都是最新创建的变量。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-12-2 09:18:46 | 显示全部楼层
from tkinter import *

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


root.mainloop()
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 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()
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-23 16:57

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表