在 Tkinter Entry 小部件中撤消和重做?

Mal*_*olm 6 python user-interface text tkinter tkinter-entry

有没有办法在 Tkinter小部件中添加撤消重做Entry功能,或者我必须使用单行Text小部件来实现此类功能?

如果是后者,在配置Text小部件以充当Entry小部件时,我应该遵循哪些提示?

一些可能需要调整的功能包括捕获Return KeyPress、将选项卡按键转换为更改焦点的请求,以及从剪贴板粘贴的文本中删除换行符。

mg.*_*mg. 2

免责声明:这些只是我想到的关于如何实施它的想法。

class History(object):

    def __init__(self):
        self.l = ['']
        self.i = 0

    def next(self):
        if self.i == len(self.l):
            return None
        self.i += 1
        return self.l[self.i]

    def prev(self):
        if self.i == 0:
            return None
        self.i -= 1
        return self.l[self.i]

    def add(self, s):
        del self.l[self.i+1:]
        self.l.append(s)
        self.i += 1

    def current(self):
        return self.l[self.i]
Run Code Online (Sandbox Code Playgroud)

运行一个线程,每 X 秒(0.5?)保存一次条目的状态:

history = History()
...
history.add(stringval.get())
Run Code Online (Sandbox Code Playgroud)

您还可以设置事件来保存条目的状态,例如 的压力Return

prev = history.prev()
if prev is not None:
    stringvar.set(prev)
Run Code Online (Sandbox Code Playgroud)

或者

next = history.next()
if next is not None:
    stringvar.set(next)
Run Code Online (Sandbox Code Playgroud)

请注意根据需要设置锁。

  • 在这里使用线程是完全没有必要的。该小部件可以在更改时轻松通知您。 (6认同)