【问题标题】:Implementing a macro recorder for a python gui?为 python gui 实现宏记录器?
【发布时间】:2011-02-23 15:41:30
【问题描述】:

我想知道如何为 python gui 实现宏记录器(可能是 PyQt,但理想情况下是不可知的)。很像 Excel 中的东西,但不是获取 VB 宏,而是创建 python 代码。以前我为 Tkinter 做了一些事情,所有的回调都通过一个记录动作的类。不幸的是,我做日志的班级有点丑陋,我正在寻找一个更好的班级。虽然这确实很好地将 gui 与其余代码分开,但就通常的信号/插槽接线而言,这似乎是不寻常的。有没有更好的办法?

其目的是让用户可以通过图形界面中的数据分析程序进行工作,查看他们的决定的效果。稍后,记录的过程可以应用于其他数据,只需稍作修改,无需启动 gui。

【问题讨论】:

  • 嗨,这个功能在 FreeCAD 中实现得非常好。对于用户的每个操作,Python 命令都会出现在 Python 控制台中。不幸的是,我不知道他们是如何做到这一点的,但我很乐意这样做。

标签: python user-interface macros recorder


【解决方案1】:

您可以应用命令设计模式:当您的用户执行一个操作时,生成一个表示所需更改的命令。然后,您实现某种命令管道来执行命令本身,很可能只是调用您已有的方法。执行命令后,您可以将它们序列化或以您想要的方式记录它们,并在需要重新执行该过程时加载一系列命令。

【讨论】:

    【解决方案2】:

    高层次思考,这就是我要做的:

    开发一个装饰器函数,用它装饰每个事件处理函数。

    这个装饰器函数会在一个统一的数据结构中记录你调用的函数,以及它的参数(以及可能的返回值)——注意,在这个数据结构上,将 Widget 和 Control 实例标记为一种特殊类型的对象.那是因为在其他运行中,这些小部件不会是相同的实例 - 啊,你甚至不能序列化工具包小部件实例,无论是 Qt 还是其他。

    到了播放宏的时候,您可以用实际运行的对象的实例替换代表小部件的对象,然后用剩余的参数简单地调用原始函数。

    在具有传递给事件处理函数的专用“事件”参数的工具包中,您还必须注意序列化和反序列化此事件。

    我希望这会有所帮助。我可以为此提出一些概念验证代码(尽管我今天有心情使用 tkinter - 必须阅读大量内容才能提出 Qt4 示例)。

    【讨论】:

      【解决方案3】:

      mayavi2 是您正在寻找的一个示例。出于您的目的,mayavi2 的“脚本记录”功能将生成一个 Python 脚本,然后可以针对其他情况进行简单修改。听说效果不错。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-02-27
        • 1970-01-01
        • 2012-02-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多