Tkinter Text 复原与重复
Text控件有一个简单复原(undo)和重做(redo)的机制,这个机制可以应用于文字删除(delete)和文字插入(insert)。Text控件在默认环境下没有开启这个机制,如果要使用这个机制,可以在Text( )方法内增加undo=True参数。
示例1
增加工具栏,在这个工具栏内有Undo和Redo功能按钮,可以分别执行Undo和Redo工作。
from tkinter import *
from tkinter import messagebox
def cutJob(): # Cut方法
print("Cut operation in progress...")
text.event_generate("<<Cut>>")
def copyJob():
print("Copy operation in process...")
text.event_generate("<<Copy>>")
def pasteJob():
print("Paste operation is in progress...")
text.event_generate("<<Paste>>")
def showPopupMenu(event):
print("Show pop-up menu...")
popupmenu.post(event.x_root,event.y_root)
def undoJob():
try:
text.edit_undo()
except:
print("No previous action")
def redoJob():
try:
text.edit_redo()
except:
print("No previous action")
root = Tk()
root.title("apidemos.com")
root.geometry("300x180")
popupmenu = Menu(root,tearoff=False)
# 在弹出菜单内建立三个命令列表
popupmenu.add_command(label="Cut",command=cutJob)
popupmenu.add_command(label="Copy",command=copyJob)
popupmenu.add_command(label="Paste",command=pasteJob)
# 单击鼠标右键绑定显示弹出菜单
root.bind("<Button-3>",showPopupMenu)
# 建立工具栏
toolbar = Frame(root,relief=RAISED,borderwidth=1)
toolbar.pack(side=TOP,fill=X,padx=2,pady=1)
# 建立Button
undoBtn = Button(toolbar,text="Undo",command=undoJob)
undoBtn.pack(side=LEFT,pady=2)
redoBtn = Button(toolbar,text="Redo",command=redoJob)
redoBtn.pack(side=LEFT,pady=2)
# 建立Text
text = Text(root,undo=True)
text.pack(fill=BOTH,expand=True,padx=3,pady=2)
text.insert(END,"Five Hundred Miles\n") # 插入时同时设置Tag
text.insert(END,"If you miss the rain I'm on,\n")
text.insert(END,"You will know that I am gone.\n")
text.insert(END,"You can hear the whistle blow\n")
text.insert(END,"A hundred miles,\n")
root.mainloop()
输出:
当我们在第46行Text( )构造方法中增加undo=True参数后,程序第14行就可以用text对象调用edit_undo( )方法,这个方法会自动执行Undo动作。程序第19行就可以用text对象调用edit_redo( )方法,这个方法会自动执行Redo动作。