0

我使用名称列表中的 for 循环创建了多个复选按钮。由于有 500 多个名称,我想使用 for 循环而不是一个一个地键入它们。我需要找出从这些复选按钮中选择了哪些名称。但是无论我怎么做,我都无法一一获取checkbuttons的值。在我的一些尝试中,我得到了一个数值,但我无法为每个复选按钮获取一个值。我不知道我在哪里做错了。我可以从这个循环中获取每个值吗?还是我必须一一写出来?

## a list as an example (There are more than 500 people on the original list.)

name_list = ['John Smith', 'Granny Smith', 'Michael Smith', 'Big Smith', 'Hello Smith']

for record in name_list:
    nameVar = IntVar()
    cb_name = Checkbutton(root, text=record, variable=nameVar, bg="white", anchor="w")
    cb_name.pack(fill="both")
4

1 回答 1

1

您可以通过创建一个包含所有记录名称及其相应状态的字典来实现这一点(0 表示未选中,1 表示选中):

from tkinter import *

root = Tk()

name_list = ['John Smith', 'Granny Smith', 'Michael Smith', 'Big Smith', 'Hello Smith']
check_dict = {} # This dictionary will contain all names and their state (0 or 1) as IntVar

def getSelected():
  # Check the state of all check_dict elements and return the selected ones as a list
  selected_names = []
  for record in check_dict:
    if check_dict[record].get():
      selected_names.append(record)
  return selected_names

# Create the checkbuttons and complet the check_dict
for record in name_list:
  nameVar = IntVar()
  cb_name = Checkbutton(root, text=record, variable=nameVar, bg="white", anchor="w")
  cb_name.pack(fill="both")
  check_dict[record] = nameVar

# A button to print the selected names
Button(root, text="Show", command=lambda: print(getSelected())).pack()

root.mainloop()

在我的代码示例中,您可以调用该getSelected()函数来获取所选记录名称的列表。

于 2022-01-30T17:03:23.313 回答