tkinter 文本小部件中的撤消功能
Undo feature in tkinter text widget
我试图在 tkinter
中的文本小部件上使用 undo
函数,但没有成功。
我这样试过:
from Tkinter import *
from ttk import Notebook
def OnVsb(*args):
text.yview(*args)
numbers.yview(*args)
def OnMouseWheel(event):
text.yview("scroll", event.delta,"units")
numbers.yview("scroll",event.delta,"units")
return "break"
def undo(*argv):
text.edit_undo()
root = Tk()
defaultbg = root.cget('bg')
root.bind('<Control-z>', undo)
note = Notebook(root)
frame = Frame(note, bd=5, relief=GROOVE, padx=5, pady=5)
frame.pack()
bar = Scrollbar(frame, command=OnVsb)
bar.pack(side=RIGHT, fill=Y)
numbers = Listbox(frame, width=5, height=30,bg=defaultbg,relief=FLAT, yscrollcommand=bar.set)
numbers.pack(side=LEFT, fill=Y)
text = Text(frame,bd=3, width=145, height=30, yscrollcommand=bar.set)
text.pack(side=LEFT, fill=Y)
text.bind("<MouseWheel>", OnMouseWheel)
text.tag_config("attr", foreground="tomato")
text.tag_config("value", foreground="dark violet")
text.tag_config("tags", foreground="dodger blue")
text.tag_config("text", font=("Georgia", "9", "bold"))
text.focus_set()
root.lift()
root.call('wm', 'attributes', '.', '-topmost', '1')
root.after_idle(root.call, 'wm', 'attributes', '.', '-topmost', False)
root.mainloop()
但由于某种原因它什么也没做。我以为它是在文本小部件中默认实现的,但是没有成功。关于如何在文本小部件上使用此功能的任何建议?任何例子将不胜感激。
好的,终于找到资料了
我只需要在初始化文本小部件时将 undo
设置为 True
,就像这样:
text = Text(frame,bd=3, width=145, height=30, yscrollcommand=bar.set, undo=True)
不需要undo
函数和text.bind
。当 undo
为 True
.
时自动运行
在Python 2 中,必须将undo
关键字arg 设置为True
才能激活undo/redo 堆栈。在Python3(至少3.6)中,栈默认是激活的。
我试图在 tkinter
中的文本小部件上使用 undo
函数,但没有成功。
我这样试过:
from Tkinter import *
from ttk import Notebook
def OnVsb(*args):
text.yview(*args)
numbers.yview(*args)
def OnMouseWheel(event):
text.yview("scroll", event.delta,"units")
numbers.yview("scroll",event.delta,"units")
return "break"
def undo(*argv):
text.edit_undo()
root = Tk()
defaultbg = root.cget('bg')
root.bind('<Control-z>', undo)
note = Notebook(root)
frame = Frame(note, bd=5, relief=GROOVE, padx=5, pady=5)
frame.pack()
bar = Scrollbar(frame, command=OnVsb)
bar.pack(side=RIGHT, fill=Y)
numbers = Listbox(frame, width=5, height=30,bg=defaultbg,relief=FLAT, yscrollcommand=bar.set)
numbers.pack(side=LEFT, fill=Y)
text = Text(frame,bd=3, width=145, height=30, yscrollcommand=bar.set)
text.pack(side=LEFT, fill=Y)
text.bind("<MouseWheel>", OnMouseWheel)
text.tag_config("attr", foreground="tomato")
text.tag_config("value", foreground="dark violet")
text.tag_config("tags", foreground="dodger blue")
text.tag_config("text", font=("Georgia", "9", "bold"))
text.focus_set()
root.lift()
root.call('wm', 'attributes', '.', '-topmost', '1')
root.after_idle(root.call, 'wm', 'attributes', '.', '-topmost', False)
root.mainloop()
但由于某种原因它什么也没做。我以为它是在文本小部件中默认实现的,但是没有成功。关于如何在文本小部件上使用此功能的任何建议?任何例子将不胜感激。
好的,终于找到资料了
我只需要在初始化文本小部件时将 undo
设置为 True
,就像这样:
text = Text(frame,bd=3, width=145, height=30, yscrollcommand=bar.set, undo=True)
不需要undo
函数和text.bind
。当 undo
为 True
.
在Python 2 中,必须将undo
关键字arg 设置为True
才能激活undo/redo 堆栈。在Python3(至少3.6)中,栈默认是激活的。