我正在寻找一种方法,可以具有加入用Python语言编写的Tkinter文本小部件的undo撤消/重做堆栈的功能.有没有类似的方法来以编程方式合并用户输入undo撤消/重做堆栈,或以编程方式将编程更改合并到Tkinter文本小部件?

例如,我希望拥有以下内容:

import tkinter as tk

root = tk.Tk()
root.title("Stackoverflow question")

text = tk.Text(root)

text.some_method()
text.insert(tk.END, "a")
text.insert(tk.END, "b")
text.insert(tk.END, "c")
text.reversing_method()

text.pack()

root.mainloop()

如您所见,在呼叫some_method之后,用户将在以编程方式输入文本(and by user)之后撤销整个字符串"abc"(当然,在重做步骤之后,字符串"abc"将再次成对返回,但不是按"a"、"b"和"c"的顺序).然而,我也想寻求一种方法,当调用reversing_method时,用户可以通过编程或逐个undo撤消输入的文本.

推荐答案

你可以的.

如果您使用的是Tkinter versioned >= 8.5(到目前为止,我使用的是Tkinter版本8.6,您的操作系统可能会有所不同;但是,我猜以下方法与Tkinter版本兼容)

  • 把你的some_method换成text.config(autoseparators=False);以及
  • 把你的reverse_method换成text.config(autoseparators=True).

附注:如果您想以编程方式手动添加undo撤消/重做堆栈and,则可以使用方法text.edit_separator().

MRE:

import tkinter as tk

root = tk.Tk()
root.title("StackOverflow answer from Misinahaiya")

text = tk.Text()
text.config(autoseparators=False) # or .configure as you like
#...
text.config(autoseparators=True) # the default, as the reversing method

root.mainloop()

Python相关问答推荐

自动编码器和极坐标

带有pandas的分区列上的过滤器的多个条件read_parquet

将列表中的元素替换为收件箱中的元素

KNN分类器中的GridSearchCV

跟踪我已从数组中 Select 的样本的最有效方法

Python上的Instagram API:缺少client_id参数"

如何列举Pandigital Prime Set

如何使用pytest来查看Python中是否存在class attribution属性?

如果值发生变化,则列上的极性累积和

在极性中创建条件累积和

迭代嵌套字典的值

如何在图中标记平均点?

如何保持服务器发送的事件连接活动?

启用/禁用shiny 的自动重新加载

启动带有参数的Python NTFS会导致文件路径混乱

旋转多边形而不改变内部空间关系

在不同的帧B中判断帧A中的子字符串,每个帧的大小不同

剪切间隔以添加特定日期

搜索按钮不工作,Python tkinter

为什么我的sundaram筛这么低效