gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-30 03:07:34 25 4
gpt4 key购买 nike

有没有办法在 Tkinter Entry 小部件中添加 undoredo 功能,或者我必须使用单行 Text 此类功能的小部件?

如果是后者,在将 Text 小部件配置为充当 Entry 小部件时,是否有我应该遵循的提示?

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

最佳答案

检查 Tkinter 自定义条目。我添加了剪切、复制、粘贴上下文菜单和撤消重做功能。

# -*- coding: utf-8 -*-
from tkinter import *


class CEntry(Entry):
def __init__(self, parent, *args, **kwargs):
Entry.__init__(self, parent, *args, **kwargs)

self.changes = [""]
self.steps = int()

self.context_menu = Menu(self, tearoff=0)
self.context_menu.add_command(label="Cut")
self.context_menu.add_command(label="Copy")
self.context_menu.add_command(label="Paste")

self.bind("<Button-3>", self.popup)

self.bind("<Control-z>", self.undo)
self.bind("<Control-y>", self.redo)

self.bind("<Key>", self.add_changes)

def popup(self, event):
self.context_menu.post(event.x_root, event.y_root)
self.context_menu.entryconfigure("Cut", command=lambda: self.event_generate("<<Cut>>"))
self.context_menu.entryconfigure("Copy", command=lambda: self.event_generate("<<Copy>>"))
self.context_menu.entryconfigure("Paste", command=lambda: self.event_generate("<<Paste>>"))

def undo(self, event=None):
if self.steps != 0:
self.steps -= 1
self.delete(0, END)
self.insert(END, self.changes[self.steps])

def redo(self, event=None):
if self.steps < len(self.changes):
self.delete(0, END)
self.insert(END, self.changes[self.steps])
self.steps += 1

def add_changes(self, event=None):
if self.get() != self.changes[-1]:
self.changes.append(self.get())
self.steps += 1

关于python - 在 Tkinter Entry 小部件中撤消和重做?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4146971/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com