2011-02-23 31 views
2

我想知道如何去执行一个python gui的宏记录器(可能是PyQt,但理想情况下是不可知的)。就像在Excel中一样,但不是获取VB宏,它会创建Python代码。以前我为Tkinter做过一些事情,所有的回调都通过一个记录行为的类。不幸的是,我的班级做日志记录有点难看,我正在寻找一个更好的。虽然这确实使得gui与其他代码很好地分离,但在通常的信号/插槽接线方面似乎是不寻常的。有没有更好的办法?为python实现宏记录器?

其意图是用户可以通过图形界面中的数据分析过程来查看他们的决定的影响。后来录制的程序可以适用于其他数据,只需稍作修改,不需要启动gui。

回答

1

高层次的思维,这是我会怎么做:

制定一个装饰作用,与我装点每一个事件处理函数。

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

当需要播放一个宏的时候,用实际运行的对象的实例来填充代替widget表示对象的间隙,并简单地用剩下的参数调用原始函数。

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

我希望这可以提供帮助。我可以想出一些概念验证码(尽管我现在有一种心情在今天使用tkinter - 必须阅读很多才能提出Qt4示例)。

1

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

0

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