内部已经有了撤销和恢复的方法,但是中间会有一个bug,就是如果没有内容可以撤销或者是没有内容可以恢复,所以要防止bug的产生,还有就是防止一次把之前插入的一行数据全部删除,设置每一次只能删除一个字符。
#!/usr/bin/python
#coding: utf-8
from Tkinter import *
root = Tk()
text = Text(root, undo = True, autoseparators = False)
text.pack(expand = YES, fill = BOTH)
text.insert(INSERT, "you can you up no can no bb")
def callback(event):
# 每当有字符插入的时候,就自动插入一个分割符,主要是防止每次撤销的时候会全部撤销
text.edit_separator()
text.bind("<Key>", callback)
def show1():
x = text.get("1.0", END)
if len(x) == 1: # 如果还剩余一个字符的话,不能撤销
return
text.edit_undo()
maxx = text.get("1.0", END)
def show2():
# 点击恢复的时候如果没有值可以被恢复的话,则会出现Bug,
# 所以要判断可以恢复的最大值,大于这个最大值的时候,则不执行恢复,防止bud
if len(maxx) == len(text.get("1.0", END)):
return
text.edit_redo()
Button(root, text = "撤销", command = show1).pack()
Button(root, text = "恢复", command = show2).pack()
root.mainloop()