Scroll小部件中的多个撤消/重做

时间:2014-01-24 18:03:02

标签: perl tkinter tcl tk perltk

我知道我可以使用 TextUndo 小部件实现多次撤消。但这并没有做重做功能。

如何实现多重撤消和多重重做?

2 个答案:

答案 0 :(得分:0)

text小部件支持完整的撤消/重做功能。你只需要打开它;因为并非text的所有用途都需要这种东西,所以它默认是关闭的。要打开它,您只需要将布尔-undo窗口小部件选项设置为true。就这么简单(尽管你写的方式可能与Tcl以外的语言略有不同,例如,在Tkinter中它是undo

然而,PerlTk似乎搞得一团糟。由于某种原因,Tk::Text小部件不支持撤销/重做(为什么?机器在那里,戳穿。)和Tk::TextUndo窗口小部件没有暴露重做功能(为什么在地球上会被省略?)这些都是PerlTk的限制,而不是Tk本身。在这种情况下,你最好的选择可能是Tk::Text::SuperText类,虽然对我来说这很奇怪,因为它只是在做我认为的核心Tk功能。

或许这只是过时的CPAN文档。

答案 1 :(得分:0)

问题是''​​绑定被分配两次,对于虚拟事件'<>' (以实现类似emacs的粘贴)到虚拟事件'<>'。普通Tk::Text没有撤消功能,因此在此处使用C-y绑定是有道理的。不幸的是,当使用Tk::TextUndo时,此绑定会发生冲突。

您有以下可能性:

  • 使用Redo的其他绑定(例如F12绑定,请参阅Tk :: MainWindow源代码以获取完整列表,或弹出菜单中的“Redo”条目)
  • 全局移除C-y <<Paste>>绑定,例如通过使用: $mw->eventDelete('<<Paste>>', '<Control-Key-y>');

我不确定如何在Perl / Tk源本身中最好地解决这个问题。最简单的方法是删除'&lt;&gt;'的emacs键绑定在这里,但emacs用户可能会不高兴。我愿意接受建议......