为python gui实现宏录制器?

时间:2011-02-23 15:41:30

标签: python user-interface macros recorder

我想知道如何为python gui实现宏录制器(可能是PyQt,但理想上是不可知的)。有点像在Excel中,但不是获得VB宏,它会创建python代码。之前我为Tkinter做了一些事情,其中​​所有回调都通过一个记录操作的类。不幸的是,我的班级做日志记录有点难看,我正在寻找一个更好的。虽然这确实将gui与其余代码完美分离,但在通常的信号/插槽布线方面似乎并不常见。还有更好的方法吗?

目的是用户可以通过图形界面中的数据分析过程,看到他们的决定的影响。之后,记录的程序可以应用于其他数据,只需稍加修改,无需启动gui。

3 个答案:

答案 0 :(得分:1)

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

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

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

当播放宏的时候,你填补了用实际运行的对象的实例替换小部件表示对象的空白,并简单地用剩余的参数调用原始函数。

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

我希望这可以提供帮助。我可以为它提出一些概念代码的证明(虽然我现在有心情使用tkinter - 需要阅读很多内容才能得出Qt4示例)。

答案 1 :(得分:1)

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

答案 2 :(得分:0)

您正在寻找的一个例子是mayavi2。出于您的目的,mayavi2的“脚本记录”功能将生成一个Python脚本,然后可以对其他情况进行简单修改。我听说它运作得很好。