CustomTkinter中CTkEntry调用focus_set()无法获取焦点的解决方法
CTkEntry调用focus_set()无法获取焦点的解决方法
执行py testy.py启动标准Tkinter时,Entry组件可通过focus_set()正常获取焦点;但执行py testy.py 1启动CustomTkinter环境时,CTkEntry调用focus_set()无法获取焦点,请问如何解决?
用户提供的测试代码:
from tkinter import * import customtkinter as ctk import sys if len(sys.argv) > 1: print("Tk Customized from Tom") win = ctk.CTk() win.geometry("750x250") text = ctk.CTkTextbox(win, width=200, height=200) text.pack() text.insert(INSERT, "Hello World!") entry = ctk.CTkEntry(win, width=100) entry.pack() entry.focus_set() else: print("Standard Tk ") win = Tk() win.geometry("750x250") text = Text(win, width=30, height=10) text.insert(INSERT, "Hello World!") text.pack() entry = Entry(win, width=30) entry.pack() entry.focus_set() win.mainloop()
解决方法
CustomTkinter的组件渲染时机和原生Tkinter有差异,直接调用focus_set()可能在组件未完全初始化时执行,导致焦点设置失败,可通过以下两种方式解决:
延迟执行焦点设置:使用
after()方法,让焦点设置在窗口渲染完成后执行
修改CustomTkinter分支中的entry.focus_set()为:win.after(100, entry.focus_set)这里的100是毫秒级延迟,可根据实际情况调整,确保组件已完成渲染。
强制获取焦点:使用
focus_force()替代focus_set()
直接把entry.focus_set()换成:entry.focus_force()该方法会强制让组件获取焦点,优先级比
focus_set()更高。
内容的提问来源于stack exchange,提问作者Rick
相关产品推荐
相关产品推荐

