小白学tkinter(Text组件的‘撤销’和‘恢复’操作)

Text组件支持’恢复‘和’撤销‘操作。
第一步:开启撤销功能 设置undo = True
第二步:实现方法:
实现’撤销‘操作 edit_undo()方法
实现’恢复‘操作 edit_redo()方法
原理:
这是因为 Text 组件内部有一个栈专门用于记录内容的每次变动,
所以每次“撤销”操作就是一次弹栈操作,“恢复”就是再次压栈。
这里写图片描述

from tkinter import *
root = Tk()
text = Text(root,width = 30,height = 3,undo = True) #开启撤销操作
text.pack()
text.insert(INSERT,'I love Python.')
def show():
    text.edit_undo()
def show1():
    text.edit_undo()   
Button(root,text = '撤销',command = show).pack()
Button(root,text = '恢复',command = show1).pack()
mainloop()
默认情况下,每一次完整的操作将会放入栈中。但怎么样算是一次完整的操作呢?Tkinter 觉得每次焦点切换、用户按下 Enter 键、删除\插入操作的转换等之前的操作算是一次完整的操作。也就是说你连续输入“FishC 是个 P”的话,一次的“撤销”操作就会将所有的内容删除。
那我们能不能自定义呢?比如我希望插入一个字符就算一次完整的操作,然后每次点击“撤销”就去掉一个字符。当然可以!做法就是先将autoseparators 选项设置为 False(因为这个选项是让 Tkinter 在认为一次完整的操作结束后自动插入“分隔符”),然后绑定键盘事件,每次有输入就用 edit_separator() 方法人为地插入一个“分隔符”。

下边这个例子就可以实现 一次恢复一个字符,呵呵!~

from tkinter import *
root = Tk()
text = Text(root, width=30, height=5, autoseparators=False, undo=True, maxundo=10) #maxundo:设置保存的“撤销”操作的最大数目
text.pack()
def callback(event):
    text.edit_separator()
text.bind('<Key>', callback)
text.insert(INSERT, "I love FishC")
def show():
    text.edit_undo()
Button(root, text="撤销", command=show).pack()
mainloop()
  • 1
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值