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

CustomTKinter中CTkEntry无法自动获取焦点问题求助

CustomTKinter中CTkEntry自动获取焦点失效的解决办法

在CustomTKinter里调用focus_set()给CTkEntry设置焦点时会失效,但同样逻辑在标准Tkinter中正常工作。核心问题是组件渲染时机:直接在创建组件后调用focus_set(),此时CTkEntry可能还未完全完成挂载,导致焦点设置不生效。

解决方法一:使用after()延迟设置焦点

通过after()方法延迟10毫秒执行焦点设置,确保窗口和组件完成渲染:

import customtkinter

customtkinter.set_appearance_mode('dark')  # Modes: "System" (standard), "Dark", "Light"
customtkinter.set_default_color_theme('green')  # Themes: "blue" (standard), "green", "dark-blue"

app = customtkinter.CTk()
app.geometry('220x155')
app.title('Program')
app.eval('tk::PlaceWindow . center')

frame_1 = customtkinter.CTkFrame(master=app)
frame_1.pack(pady=5, padx=5, fill="both", expand=True)

title = customtkinter.CTkLabel(master=frame_1, text="Title", font=customtkinter.CTkFont(size=20, weight='bold'))
title.pack(pady = 1, padx = 1)

text = customtkinter.CTkLabel(master=frame_1, text="Label", font=customtkinter.CTkFont(size=10))
text.pack(pady = 5, padx = 5)

entry = customtkinter.CTkEntry(master=frame_1)
entry.pack()

# 延迟10ms执行焦点设置,确保组件已渲染完成
app.after(10, entry.focus_set)

def imprime(event=None):
    print('txt')

def imprime2():
    print('txt2')

app.bind('<Return>', imprime)
ligar = customtkinter.CTkButton(master=frame_1, text='button', command = imprime2)
ligar.pack(pady=5, padx=5)

app.mainloop()

解决方法二:绑定窗口<Map>事件设置焦点

当窗口显示(触发<Map>事件)时再设置焦点,确保组件已准备就绪:

import customtkinter

customtkinter.set_appearance_mode('dark')
customtkinter.set_default_color_theme('green')

app = customtkinter.CTk()
app.geometry('220x155')
app.title('Program')
app.eval('tk::PlaceWindow . center')

frame_1 = customtkinter.CTkFrame(master=app)
frame_1.pack(pady=5, padx=5, fill="both", expand=True)

title = customtkinter.CTkLabel(master=frame_1, text="Title", font=customtkinter.CTkFont(size=20, weight='bold'))
title.pack(pady = 1, padx = 1)

text = customtkinter.CTkLabel(master=frame_1, text="Label", font=customtkinter.CTkFont(size=10))
text.pack(pady = 5, padx = 5)

entry = customtkinter.CTkEntry(master=frame_1)
entry.pack()

def set_focus(event):
    entry.focus_set()
    # 解绑事件,避免窗口重新显示时重复触发
    app.unbind('<Map>', focus_id)

# 绑定窗口显示事件
focus_id = app.bind('<Map>', set_focus)

def imprime(event=None):
    print('txt')

def imprime2():
    print('txt2')

app.bind('<Return>', imprime)
ligar = customtkinter.CTkButton(master=frame_1, text='button', command = imprime2)
ligar.pack(pady=5, padx=5)

app.mainloop()

两种方法都能确保CTkEntry在窗口打开时自动获取焦点,无需手动点击即可开始输入。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 15:17:02