checkbox - 未选中检查按钮时如何从标签中删除文本?
问题描述
我正在处理此代码。我想让它显示标签上检查按钮的文本,并在未检查检查按钮时删除文本。第一个问题是我无法删除它,因为系统响应
TypeError:列表索引必须是整数或切片,而不是 str
另一个问题是我想制作一个随机播放按钮,它可以随机播放标签中的文本。我试过random.shuffle()
但似乎不起作用。提前致谢!!
import tkinter as tk
import random
window = tk.Tk()
checkbutton_frame = tk.Frame(window)
checkbutton_frame.grid(column=0, row=1)
contentvar = tk.StringVar()
label = tk.Label(window, textvariable=contentvar,
bg='white', font=('Arial', 10), width=20, height=20, wraplength=50)
label.grid(column=6, row=1, padx=20,
pady=20, columnspan=2)
cb_list = ['ray', 'kevin', 'jacky']
cb_vars = []
checked = []
check_list = 1
def display():
for text, var in zip(cb_list, cb_vars):
if var.get():
checked.append(text)
contentvar.set(list(set(checked)))
else:
for i in checked:
del checked[i]
def shuffle():
random.shuffle(checked)
for r, element in enumerate(cb_list):
var = tk.BooleanVar(window, False)
cb = tk.Checkbutton(checkbutton_frame, variable=var,
text=element, command=display)
cb.grid(column=check_list, row=r, sticky='w')
cb_vars.append(var)
shuffle_button = tk.Button(window, text='SHUFFLE', command=shuffle)
shuffle_button.grid(column=8, row=2)
window.mainloop()
解决方案
在display()
您拥有的功能中:
else:
for i in checked:
del checked[i]
但检查是一个字符串,所以我将是一个字符串。尝试:
for i, dummy in enumerate(checked):
还有一些事情:该函数display()
会附加到已checked
检查项目的列表中,即使它们已经存在。这使它看起来像删除不起作用。在将它们加载到标签之前,您看不到您必须将set
它们放入标签中,set
因为不允许相同的项目。
然后你应该设置contentvar
after all processing ,即函数中的最后一个。这是一个有效的版本:
def display():
for text, var in zip(cb_list, cb_vars):
if var.get():
if text not in checked:
checked.append(text)
else:
if text in checked:
checked.remove(text)
contentvar.set(checked)
现在标签中的文本按照您放置它们的顺序出现。
该功能shuffle()
工作得很好,可以打乱列表checked
。但是您也必须将其加载到标签中:
def shuffle():
random.shuffle(checked)
contentvar.set(checked)
推荐阅读
- python - 将 Python API JSON 值存储到 PostgreSQL 时遇到问题
- if-statement - 基于 Groovy Result 响应的条件 Goto
- memory - DolphinDB 内存管理
- python - TypeError:从 API 检索数据时,列表索引必须是整数或切片,而不是 str
- c++ - 参数不同时重载解析不选择模板
- java - 在链表中指定元素之前插入一个元素
- node.js - React 项目无法在 Windows 命令提示符下启动,生命周期出错,WSL Bash 很好
- python - pdoc3 ValueError:如果从其他包导入,则找不到文件或模块“xxx”
- javascript - DIScord静音投票
- anki - 如何将视频添加到我的 anki 闪存卡?