【问题标题】:Python printing checkbox valuesPython打印复选框值
【发布时间】:2020-01-21 05:01:17
【问题描述】:

我正在尝试打印我选择的复选框的值。有人可以帮我指出正确的方向吗?我在这一行遇到错误 - 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()

【问题讨论】:

  • edit您的问题包含错误。
  • 问题是 item 不是访问列表的有效索引。抱歉,我对 TKinter 不了解,但与此同时,你可以看看这个:stackoverflow.com/questions/50048561/…
  • 总是将完整的错误消息(从单词“Traceback”开始)作为文本(不是屏幕截图)放在有问题的(不是评论)中。还有其他有用的信息。
  • 查看print( item ) 中的内容。列表 my_items 需要编号,但 item 不是编号。您必须以不同的方式重写所有内容。为什么不从字典中得到keys

标签: python tkinter


【解决方案1】:

如果你创建了类似的字典

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

那么你应该使用字典中的keysvalues

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()

【讨论】:

  • 非常有帮助。谢谢!
猜你喜欢
  • 2015-02-20
  • 2011-09-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-13
相关资源
最近更新 更多