CustomTkinter文本框Control-Z/Control-Y撤销重做功能失效求助
解决CustomTkinter中CTkTextbox的撤销/重做功能问题
实现方案
CTkTextbox本质封装了tkinter原生的Text组件,可直接调用原生组件的撤销/重做方法,通过绑定快捷键即可实现功能:
- 绑定
Ctrl+Z到撤销操作,绑定Ctrl+Y到重做操作 - 访问CTkTextbox的
_textbox属性获取内部原生Text组件,调用其edit_undo()和edit_redo()方法
完整代码示例
import customtkinter as CTk class App(CTk.CTk): def __init__(self): super().__init__() self.FontList = ("Arial", 12) self.Entry = CTk.CTkTextbox(self, width=816, height=420, font=self.FontList) self.Entry.grid(row=1, column=0) # 绑定Windows/Linux平台快捷键 self.Entry.bind("<Control-z>", lambda e: self.Entry._textbox.edit_undo()) self.Entry.bind("<Control-y>", lambda e: self.Entry._textbox.edit_redo()) # 绑定Mac平台快捷键 self.Entry.bind("<Command-z>", lambda e: self.Entry._textbox.edit_undo()) self.Entry.bind("<Command-shift-z>", lambda e: self.Entry._textbox.edit_redo()) if __name__ == "__main__": app = App() app.mainloop()
关键说明
- CTkTextbox._textbox是组件内部的原生tkinter
Text对象,原生组件自带完善的撤销/redo逻辑 - 同时兼容Windows/Linux和Mac平台的快捷键习惯,提升使用体验
内容的提问来源于stack exchange,提问作者Vihaan Mody
相关产品推荐
相关产品推荐

