Python中选择性撤消函数的问题

Python中选择性撤消函数的问题,python,python-3.x,menu,tkinter,undo,Python,Python 3.x,Menu,Tkinter,Undo,我在海龟画布上创建了一个程序,用户可以按键盘上的任意字母键,海龟在画布上绘制相应的字母。我还实现了一个撤销函数,通过清除画布,然后重新绘制所有内容,直到撤销操作之前,撤销最后一个调用的函数。此撤消功能由用户按下画布底部标记为“撤消”的tkinter按钮或按下键盘上的“左”键来实现 但是,我还决定创建一个动态(也称为选择性、非线性等)撤消方法,其中有一个tkinter下拉菜单,每个绘图函数(如所称)都写入该菜单。然后,从菜单中,用户可以选择他/她之前调用的要撤消的函数,程序将撤消该特定函数实例。整

我在海龟画布上创建了一个程序,用户可以按键盘上的任意字母键,海龟在画布上绘制相应的字母。我还实现了一个撤销函数,通过清除画布,然后重新绘制所有内容,直到撤销操作之前,撤销最后一个调用的函数。此撤消功能由用户按下画布底部标记为“撤消”的tkinter按钮或按下键盘上的“左”键来实现

但是,我还决定创建一个动态(也称为选择性、非线性等)撤消方法,其中有一个tkinter下拉菜单,每个绘图函数(如所称)都写入该菜单。然后,从菜单中,用户可以选择他/她之前调用的要撤消的函数,程序将撤消该特定函数实例。整个过程描述如下:

tkinter下拉菜单通过以下代码块创建:

# global variables because next code block located ABOVE this one
global fav
fav = Menubutton(text = "Selective redo", state = DISABLED)
fav.pack(side = "left")
fav.menu = Menu(fav, tearoff = 0)
fav["menu"] = fav.menu
global redo1
redo1 = fav.menu
fav.pack()
绘制字母时,该字母的点对象将使用下面的代码块写入菜单:

po = Point(v,y,c,w,isdown(),x,ph,pw)
undo1.add_command(label = Point.__str__(po), command = lambda: selectundo(undo1.index(po)))
# 'po' is a Point object for each function, and the string of that is the label of the menu item
Point.\uuu str\uuuu()
这是一种点对象方法:

def __str__(self):
    return "({})".format(self.function)
最后,用户应该能够从菜单中选择要撤消的字母实例,程序使用下面的用户定义函数撤消该字母实例:

def selectundo(x):
    for ty in range(x, len(function)):
        undoHandler()
        update()
        listen()

这里的问题是,当用户选择绘制两个或多个相同的字母时,它们都会以相同的索引值写入菜单,因此,如果用户想要撤消其中的一个,它将从画布上撤消该字母的所有实例,而不仅仅是用户选择的实例!但是,我希望程序仅撤消用户从菜单中选择的字母实例关于如何解决此问题,您有什么想法吗?非常感谢您的帮助!:)

在上一个问题中尝试时,您应该在标签上添加唯一的编号。但你们应该更努力地寻找解决方案——也许问题的位置和你们预期的不一样。顺便说一句:你们可以用
str(po)
而不是
Point.\uu str(po)
,因为
str()
将使用
Point.\uu str\uuu()
自动为所有
对象添加唯一编号。在上一个问题中尝试时,应在标签上添加唯一编号。但你们应该更努力地寻找解决方案——也许问题的位置和你们预期的不同。顺便说一句:你们可以使用
str(po)
而不是
Point.\uu str(po)
,因为
str()
将使用
Point.\uu str()
自动为所有
Point
对象。