首页 > 解决方案 > Python打印复选框值

问题描述

我正在尝试打印我选择的复选框的值。有人可以帮我指出正确的方向吗?我在这一行遇到错误 - print(my_items[item])

这是错误:

TypeError:列表索引必须是整数或切片,而不是 IntVar

import tkinter as tk
from tkinter import *

top = tk.Tk()
top.wm_title("Checklist")
my_items = ['pizza','breadsticks','wings','CocaCola','brownie'] 
check_boxes = {item:IntVar() for item in my_items}

def confirm():
    for item in check_boxes.values():
        if item.get() == 1:
            print(my_items[item])

for item in my_items:
    CB = Checkbutton(top, text = item, variable = check_boxes[item], anchor = W,  onvalue = 1, offvalue = 0, height=1, width = 50)
    CB.pack()

B1 = tk.Button(top, text = "confirm", command = confirm)
B1.pack()


top.mainloop()

标签: pythontkinter

解决方案


如果您创建了像

check_boxes  = {'pizza': IntVar(), ...}

那么你应该使用keysand valuesfrom dictionary

在你得到你需要的key文本'pizza'

def confirm():
    for key, item in check_boxes.items():
        if item.get() == 1:
            print(key)

import tkinter as tk
# from tkinter import * # PEP8: `import *` is not preferred

# --- functions ---

def confirm():
    for key, item in check_boxes.items():
        if item.get() == 1:
            print(key)

# --- main ---

my_items = ['pizza', 'breadsticks', 'wings', 'CocaCola', 'brownie'] 

root = tk.Tk()

check_boxes = {item:tk.IntVar() for item in my_items}

for item in my_items:
    cb = tk.Checkbutton(root, text=item, variable=check_boxes[item], anchor='w', onvalue=1, offvalue=0, width=50)
    cb.pack()

b1 = tk.Button(root, text="confirm", command=confirm) # PEP8: without spaces around `=`, `lower_case_names` for variables
b1.pack()

root.mainloop()

顺便说一句:您也可以使用StringVar()onvalue='pizza'

import tkinter as tk

# --- functions ---

def confirm():
    for string_var in check_boxes:
        text = string_var.get()
        if text:
            print(text)

# --- main ---

my_items = ['pizza', 'breadsticks', 'wings', 'CocaCola', 'brownie'] 

root = tk.Tk()

check_boxes = []

for item in my_items:
    string_var = tk.StringVar()
    check_boxes.append(string_var)

    cb = tk.Checkbutton(root, text=item, variable=string_var, anchor='w', onvalue=item, offvalue='', width=50)
    cb.pack()

b1 = tk.Button(root, text="confirm", command=confirm)
b1.pack()

root.mainloop()

推荐阅读