我正处于为程序创建入口表格的过程中,似乎我对这一逻辑感到困惑。
基本上,我想设计一个dropdwon列表,该列表将单词添加到数组中并将这些单词显示为数组下方的小按钮。当您单击按钮时,它们再次消失并从阵列中删除它们自己。我想很简单。到目前为止,添加工作正常。但是删除不多...按钮数组存在逻辑错误,我似乎无法弄清楚!
我提取了要检查的代码,
非常感谢您的帮助!
import tkinter as tk
from tkinter import ttk
def rel_add(*args):
rel_array.append(tkvar.get())
print(rel_array)
rel_buttons_update()
def del_button(i):
print(i)
del rel_array[i]
print(rel_array)
rel_buttons[i].grid_remove()
# del rel_buttons[i]
rel_buttons_update()
def rel_buttons_update():
for i, rel in enumerate(rel_array):
rel_buttons.append(tk.Button(rel_grid, text=rel, font="Helvetica 7", command=lambda c=i: del_button(c)))
rel_buttons[i].grid(column=i, row=0, sticky="nw")
rel_array = []
rel_buttons = []
win = tk.Tk()
tkvar = tk.StringVar(win) # Create a Tkinter variable
choices_words = ["oolbath", "pflanze", "haus", "wasser", "brimbambum"] # Create Variable List
tkvar.set('Related Words...') # set the default option
choices_words.sort() # Sort List
tk.Label(win, text="Related Words: ").grid(row=0,column=0, sticky="w")
rel = tk.OptionMenu(win, tkvar, *choices_words)
rel.grid(row=0,column=1, sticky="w")
# Callbuck Function for Dropdwon Menu
tkvar.trace("w", rel_add)
rel_grid = tk.Frame(win)
# Display the Buttons for the related Words
rel_grid.grid(row=1,column=1, sticky="w")
win.mainloop()
主要问题是您不断重复创建相同的按钮,因此rel_buttons
包含的元素比您预期的要多。
作为一个简单的实验,像这样向rel_buttons_update
添加打印语句:
def rel_buttons_update():
for i, rel in enumerate(rel_array):
rel_buttons.append(ttk.Button(rel_grid, text=rel, command=lambda c=i: del_button(c)))
rel_buttons[i].grid(column=i, row=0, sticky="nw")
print('in update, rel_buttons is now', rel_buttons)
[您会注意到,第一次使用选项菜单时有一个按钮,第二次是三个按钮,第三次是六个按钮,依此类推。
您只需创建新按钮,或删除所有旧按钮,然后再重新创建它们。