You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Tkinter实现OptionMenu选中特定选项时弹出新窗口

Tkinter OptionMenu选中指定选项弹出窗口解决方案

原代码问题点

  • 选中值判断逻辑写在全局作用域,仅会在程序初始化时运行一次,无法在每次下拉选项变更时触发
  • 弹窗使用Tk()实例化会创建多个主窗口,引发事件循环冲突,应该使用Toplevel创建子弹窗
  • 选项变更后的业务逻辑没有放到绑定的changed回调函数中,无法被trace触发执行

修改后完整代码

from tkinter import *

# 主窗口初始化
root = Tk()
root.title("主窗口")
options = ["选项1", "选项2", "Particular Option", "选项3"]
clicked = StringVar()
clicked.set(options[0])

# 弹窗函数调整
def alert_popup():
    # 用Toplevel创建子弹窗,不要重复实例化Tk()
    popup = Toplevel()
    popup.title("提示")
    sw = popup.winfo_screenwidth()
    sh = popup.winfo_screenheight()
    popup.geometry('%dx%d+%d+%d' % (sw//2, sh//2, sh//4, sw//4))
    w = Label(popup, text="已选中指定选项", width=120, height=10)
    w.grid()
    b = Button(popup, text="OK", command=popup.destroy, width=10)
    b.grid()

# 选项变更回调函数
def changed(*args):
    selected_val = clicked.get()
    print(selected_val)
    # 把判断逻辑放到回调内,每次值变动都会触发判断
    if selected_val == "Particular Option":
        alert_popup()

# 下拉菜单配置
drop = OptionMenu(root, clicked, *options)
drop.grid(pady=10)
# 绑定值变更监听
clicked.trace("w", changed)

root.mainloop()

核心修改说明

  • 把选中值的判断逻辑迁移到了changed回调函数内,每次下拉选项变更都会触发判断
  • 弹窗改用Toplevel实现,避免多主窗口导致的异常
  • 给回调函数加了*args参数,适配trace触发时传入的默认参数,避免参数不匹配报错

内容的提问来源于stack exchange,提问作者Ishaan Joshi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.19 13:45:03