[PyQt5-Node-Editor][进阶篇]使用Pyqt5制作节点编辑器(19)——撤销与重做(二)历史堆栈

目标

GIF 2021-7-22 21-47-54.gif
在本章节,我设置了6个按键事件来模拟,实际的操作,分别是数字键1-5,和H

  • Key_1 代表事件 ItemA(模拟实际的操作)
  • Key_2 代表事件 ItemB
  • Key_3 代表事件 ItemC
  • Key_4 undo
  • Key_5 redo
  • Key_H 查看信息

每当执行一次事件时,事件就会被存储到历史堆栈里,最高上限为8,并且会记录当前位置
undo: 将位置往回移动,直到位置为0时
redo: 将位置向前移动,直到位置为历史堆栈最前面
查看信息:查看当前历史堆栈里面的内容,和当前位置

其中:
当历史堆栈达到上限后,新的事件将会存储在最前面,而前面的事件存储,将会往后移动一格
当undo后执行新的事件,则会将前面的事件清空(因为已经偏离了之前的历史堆栈)

实现

处理历史堆栈

新建文件node_scene_history.py
它将建立历史堆栈,负责管理Scene的历史堆栈,包括储存,undo,redo等功能

DEBUG = True

class SceneHistory():
    def __init__(self,scene):
        self.scene = scene

        self.history_stack = []
        self.history_current_step = -1
        self.history_limit = 8

    def undo(self):
        if DEBUG:
            print('undo')

        if self.history_current_step > 0:
            self.history_current_step -= 1
            self.restoreHistory()

    def redo(self):
        if DEBUG:
            print('redo')
        if self.history_current_step + 1 < 
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值