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

ttk.Combobox下拉列表在新窗口激活后仍可见的问题

解决方案

问题分析

ttk.Combobox的下拉列表是独立的顶层窗口,默认不会随主窗口一同隐藏;同时主窗口的<FocusOut>事件需要正确绑定才能触发。

解决步骤

  1. 绑定主窗口的<FocusOut>事件,在事件回调中关闭组合框的下拉列表。
  2. 使用event_generate('<Escape>')模拟按下ESC键,触发ttk.Combobox内置的下拉列表关闭逻辑。

修改后的代码

import tkinter as tk
import webbrowser
from tkinter import ttk

def on_root_focus_out(event):
    # 关闭Combobox的下拉列表
    combo.event_generate('<Escape>')
    # 此处添加你需要的FocusOut事件处理逻辑
    print("主窗口已失去焦点")

root = tk.Tk()
root.geometry("300x200")

combo = ttk.Combobox(root, state="readonly")
combo['values'] = ["Option 1", "Option 2", "Option 3"]
combo.bind('<Button-1>', lambda event: root.after(2000, lambda: webbrowser.open("https://stackoverflow.com")))
combo.pack()

# 绑定主窗口的FocusOut事件
root.bind('<FocusOut>', on_root_focus_out)

root.mainloop()

说明

  • 当浏览器窗口激活导致主窗口失去焦点时,<FocusOut>事件触发,执行on_root_focus_out函数。
  • combo.event_generate('<Escape>')会强制关闭Combobox的下拉弹窗,确保它随主窗口一同隐藏。
  • 你可以在on_root_focus_out函数中添加任何需要在主窗口失焦时执行的自定义代码。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 09:34:51