lzb1001 发表于 2022-5-12 12:26:12

翻牌子的代码两处没看懂……

win10/python3.7.6

--------------------------

from tkinter import *

root = Tk()

GIRLS = ['西施', '王昭君', '貂蝉', '杨玉环',]

v = []

for girl in GIRLS:
    v.append(IntVar())
    b = Checkbutton(root, text=girl,variable=v[-1])
    b.pack(anchor=W, padx=25, pady=5)
   

root.title('翻牌选美女')


mainloop()


问题(2处红色字体):

1、为何用girl而不是用GIRL?

2、刚测试如果没有variable=v[-1],程序好像也可以运行,所以variable=v[-1]有什么作用?为何用[-1]不用其他?

Twilight6 发表于 2022-5-12 12:34:13


1、为何用girl而不是用GIRL?

变量名赋值问题,因为你循环迭代的是用 girl 来承载元素的(for girl in GIRLS:),所以使用这个元素时就需要传入 gril,如果你承载元素是 GIRL ,那么你这里同样要写成 GIRL


2、刚测试如果没有variable=v[-1],程序好像也可以运行,所以variable=v[-1]有什么作用?为何用[-1]不用其他?

设置每个复选框的 value 值,[-1] 因为 append 添加元素是在列表的最后一个,所以这里取 [-1] 表示取最后一个元素,即前一行刚刚添加入的 IntVar() 对象

lzb1001 发表于 2022-5-12 12:36:41

Twilight6 发表于 2022-5-12 12:34
变量名赋值问题,因为你循环迭代的是用 girl 来承载元素的(for girl in GIRLS:),所以使用这个元素 ...

似懂非懂,尤其第2个,还有更通俗易懂的解释吗?而且为什么不要的话好像也可以运行正常呢?

Twilight6 发表于 2022-5-12 12:39:54

lzb1001 发表于 2022-5-12 12:36
似懂非懂,尤其第2个,还有更通俗易懂的解释吗?


设置复选框各个的值,因为 IntVar() 对象方法 get() 可以获取这个对象内的属性

当你将复选框选中时 IntVar 对象中的值会被设置为 1,未选中时设置为 0 我们可以通过 调用 .get() 方法来获取此时复选框是否被选中

若没有设置这个属性,那么就获取不到复选框具体状态

lzb1001 发表于 2022-5-12 13:56:37

Twilight6 发表于 2022-5-12 12:39
设置复选框各个的值,因为 IntVar() 对象方法 get() 可以获取这个对象内的属性

当你将复选框选中时...

也就是说没有也可以运行,但没有就取不到复选框具体状态,为了要取到复选框具体状态,所以必须要用

lzb1001 发表于 2022-5-12 21:19:40

1、循环在这段代码中的作用是……?

2、代码运行后,是先生成一个框架,然后每循环一次,依次添加'西施', '王昭君', '貂蝉', '杨玉环四个复选框,是这样吗?

今天走进这段代码的死胡同了,一直绕不出来
页: [1]
查看完整版本: 翻牌子的代码两处没看懂……