如何实现Tkinter应用无需重启即可更新下拉菜单选项
要实现添加内容后实时更新OptionMenu,核心是直接操作OptionMenu的菜单对象,添加新选项并同步数据列表。以下是修改后的代码及关键说明:
修改后的完整代码
from tkinter import * from tkinter import messagebox root = Tk() root.title("test tool") root.iconbitmap("D:\Software\GigaPixel Frames\Dump\New folder\imgs\Logo.ico") root.geometry("1600x800") DropDownvar = StringVar(value="Select an option") DropDownvar.set("Select an option") # 读取文件时去除每行末尾的换行符,避免选项显示带换行 my_list = [line.strip() for line in open("Characters.txt").readlines()] DropDownMenu = OptionMenu(root, DropDownvar, *my_list) DropDownMenu.pack() inputBox = Entry(root) inputBox.pack() def ButtonFun(): InputBoxEntry = inputBox.get().strip() # 去除输入内容的前后空格 if not InputBoxEntry: # 过滤空输入 messagebox.showwarning("提示", "请输入有效内容") return # 写入文件 with open("Characters.txt", "a") as text_file: text_file.write(InputBoxEntry + "\n") # 获取OptionMenu的菜单对象 menu = DropDownMenu['menu'] # 添加新选项到菜单,点击时设置变量值 menu.add_command(label=InputBoxEntry, command=lambda value=InputBoxEntry: DropDownvar.set(value)) # 将新内容同步到数据列表 my_list.append(InputBoxEntry) # 清空输入框 inputBox.delete(0, END) inputBoxButton = Button(root, text="Input", command=ButtonFun) inputBoxButton.pack() root.mainloop()
关键修改点说明
- 处理换行符:读取文件时用
strip()去除每行末尾的\n,避免选项显示时带换行;输入内容也做strip()处理,防止空内容或多余空格。 - 操作菜单对象:通过
DropDownMenu['menu']获取OptionMenu的底层菜单控件,调用add_command()直接添加新选项,并绑定点击时设置变量的逻辑。 - 同步数据列表:将新添加的内容追加到
my_list,保持内存数据和文件一致。 - 空输入过滤:添加判断避免写入空内容到文件,同时弹出提示提醒用户。
内容的提问来源于stack exchange,提问作者BragonGod
相关产品推荐
相关产品推荐

