使用不定数量的 canvas 个对象
Working with indefinite number of canvas objects
我正在尝试制作某种绘图工具,用于在 tkinter 上绘制预定义的形状,例如线条、框等。
问题 1: 我想添加重做-撤消按钮,这样当我撤消时,最后一个对象将被删除,重做时,最后一个对象将被添加。我以为我可以在创建时标记每个对象并将每个对象的标记存储在列表中,但我找不到合理的解决方案。
问题 2: 我怎样才能添加最后删除的对象?如果我通过标签 -undoing event- 删除,据我所知数据会丢失。我想我不应该丢失数据。
下面的伪代码示例:
line=create_line(...)
...
#tag should be assigned for further access
...
stack.append(tag)
...
#deleting by tag in undo event
undo(event): stack.pop()
#adding by tag in redo event
redo(event):
stack.append(lasttag)
#problem2: adding the last object
我不想绘制所有边框,但为了清晰起见,我添加了这些线条。只要能回答问题,建议的解决方案就可以在更大、更灵活的上下文中使用。提前致谢
一个简单的解决方案是将已删除的项目移动到 canvas 的不可见部分,而不是删除它们。然后,"redo" 简单地将它们移回。
另一种选择是,当您删除某些内容时,您会保存其所有参数(坐标、颜色等),以便稍后重新创建它们。
我正在尝试制作某种绘图工具,用于在 tkinter 上绘制预定义的形状,例如线条、框等。
问题 1: 我想添加重做-撤消按钮,这样当我撤消时,最后一个对象将被删除,重做时,最后一个对象将被添加。我以为我可以在创建时标记每个对象并将每个对象的标记存储在列表中,但我找不到合理的解决方案。
问题 2: 我怎样才能添加最后删除的对象?如果我通过标签 -undoing event- 删除,据我所知数据会丢失。我想我不应该丢失数据。
下面的伪代码示例:
line=create_line(...)
...
#tag should be assigned for further access
...
stack.append(tag)
...
#deleting by tag in undo event
undo(event): stack.pop()
#adding by tag in redo event
redo(event):
stack.append(lasttag)
#problem2: adding the last object
我不想绘制所有边框,但为了清晰起见,我添加了这些线条。只要能回答问题,建议的解决方案就可以在更大、更灵活的上下文中使用。提前致谢
一个简单的解决方案是将已删除的项目移动到 canvas 的不可见部分,而不是删除它们。然后,"redo" 简单地将它们移回。
另一种选择是,当您删除某些内容时,您会保存其所有参数(坐标、颜色等),以便稍后重新创建它们。