使用 tkinter 的 OptionMenu 组件制作可以改变菜单选项的动态下拉菜单

首先导入tkinter组件,建立root窗口,放置标签。因为tkinter自带的OptionMenu组件比较丑,所以这里使用tkinter.ttk模块提供的OptionMenu组件进行演示,需要先导入tkinter.ttk模块。tkinter与tkinter.ttk模块提供的OptionMenu组件使用方法基本相同。

import tkinter as tk
import tkinter.ttk as ttk
root = tk.Tk()
root.title("PRTS")
root.geometry("240x150")

tk.Label(root, text="基于OptionMenu的下拉菜单示例").pack(pady=10)

root.mainloop()

接下来新建OptionMenu组件。其中,tk.StringVar类型变量v是显示在菜单输入框中的文字,v后边的第一个变量是菜单输入框中默认显示的变量,之后的字符串序列是菜单可以选择的输入变量。

v = tk.StringVar(root)
dropdownmenu = tk.ttk.OptionMenu(root, v, "(空)", "史尔特尔", "艾雅法拉", "伊芙利特")

接下来是编写修改下拉菜单列表的函数

首先,使用'menu'作为键名索引下拉菜单,并使用.delete()方法删除不需要的菜单,全部删除可使用.delete(0, 'end')代码。

接下来使用.add_command(label=op, command=lambda x=op: v.set(x)) 方法新增菜单选项。label是菜单选项显示的字,command是点击选项后执行的函数,因为我们需要用菜单输入框显示我们点击的选项,因此我们需要在点击选项后将选项的文字信息填写到tk.StringVar类型变量v中。这里使用lambda方法构造匿名函数。

代码如下:

def set_optionmenu(opl:list):
    dropdownmenu['menu'].delete(0, 'end')
    for op in opl:
        dropdownmenu['menu'].add_command(label=op, command=lambda x=op: v.set(x))
    v.set("(空)")#设置更新菜单后默认显示的选项

接下来放置按键组件,使用lambda方法构造匿名函数,将新的下拉菜单列表通过刚刚配置好的set_optionmenu 函数传入OptionMenu中。

setbutton = tk.Button(root, text="更新干员名单", command=lambda: set_optionmenu(newlist))
newlist = ["克洛斯", "芬", "芙蓉"]
setbutton.pack()

最后放置一个按键,在控制台输出OptionMenu选中的数据

tk.Button(root, text="输出你的选择", command=lambda: print("你选择的干员是:"+v.get())).pack()

运行结果如下:
原始下拉菜单:
原下拉菜单
点击“更新干员名单”按键,获得新的下拉菜单
在这里插入图片描述
控制台输出结果:
在这里插入图片描述

完整代码如下:

import tkinter as tk
import tkinter.ttk as ttk

root = tk.Tk()
root.title("PRTS")
root.geometry("240x150")

tk.Label(root, text="基于OptionMenu的下拉菜单示例").pack(pady=10)

v = tk.StringVar(root)
dropdownmenu = tk.ttk.OptionMenu(root, v, "(空)", "史尔特尔", "艾雅法拉", "伊芙利特")
dropdownmenu.pack(fill="x")

def set_optionmenu(opl:list):
    dropdownmenu['menu'].delete(0, 'end')
    for op in opl:
        dropdownmenu['menu'].add_command(label=op, command=lambda x=op: v.set(x))
    v.set("(空)")

setbutton = tk.Button(root, text="更新干员名单", command=lambda: set_optionmenu(newlist))
newlist = ["克洛斯", "芬", "芙蓉"]
setbutton.pack()

tk.Button(root, text="输出你的选择", command=lambda: print("你选择的干员是:"+v.get())).pack()

root.mainloop()


主要参考资料:python中tkinter 对话框里面的OptionMenu下拉内容动态变化_raynfeild的博客-CSDN博客_tkinter下拉菜单动态数据

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值