【发布时间】:2020-07-03 04:24:48
【问题描述】:
我正在尝试从列表中创建复选框。 (biomelis_ = ['Arctic','Hill','Coast', 'Desert', 'Forest','Grassland', 'Mountain', 'Swamp', 'Underdark','Underwater', 'Urban' ])。
然后我想选中这些框并按“开始”。我试图让输出成为一个列表。例如,如果我选中“Arctic”、“Hill”和“Coast”,我的输出将是 ['Arctic', 'Hill', 'Coast']。我一直在阅读文档,但我正在努力解决这个问题。
这里是完整的代码:
from tkinter import *
biomelis_ = ['Arctic', 'Hill', 'Coast', 'Desert', 'Forest', 'Grassland', 'Mountain', 'Swamp', 'Underdark', 'Underwater',
'Urban']
root = Tk()
var = StringVar()
# var.set(biomelis_ [0])
def sel():
biome_lis_selection = var.get()
print(biome_lis_selection)
return [biome_lis_selection]
for item in range(len(biomelis_)):
l = Checkbutton(root, text=biomelis_[item], variable=var)
print("l = Checkbutton(root, text=" + str(biomelis_[item]) + ", variable=" + str(var))
l.pack(anchor='w')
def go(): ### runs tkinter
biomes_Checklist = sel()
b.config(state=NORMAL)
b.delete('1.0', END)
b.insert(INSERT, sel())
b.config(state=DISABLED)
## defines go button. This launches the def go() when the go button is pressed.
go_button = Button(root, text="Go!", width=10, command=go)
go_button.pack()
b = Text(root)
b.pack()
root.mainloop()
这是我正在努力解决的部分 - 获取所选项目。
l = Checkbutton(root, text=biomelis_[item], variable=var)
这将返回“l”而不是列表中的单个项目。此外,所有复选框都会同时选中和取消选中。
【问题讨论】:
-
我认为它会在 l = Checkbutton(root, text=biomelis_[item], variable=biomelis_[item]) 行中定义。所以 variable=biomelis_[item] 但我猜这是错误的
-
“我以为...那个 variable=biomelis_[item]”:这是一个命名参数,而不是如何分配 @ 987654327@ 到
tkinter小部件。阅读The Variable Classes 怎么做。 -
谢谢。我创建了一个名为 var = StringVar() 的变量类。然后我使用var.get()。我还更改了行 l = Checkbutton(root, text=biomelis_[item], variable=var)。我已经编辑了上面的代码以反映这一点。但是,当我按下 go 时,返回的是 'l'。此外,所有框同时选中和取消选中(不能选中单个框)。
-
“所有复选框同时选中和取消选中”:您需要一个
variable=和Checkbutton(...。考虑使用这种方法:correctly-extend-a-tkinter-widget-using-inheritance