我想知道如何为python gui实现宏录制器(可能是PyQt,但理想上是不可知的)。有点像在Excel中,但不是获得VB宏,它会创建python代码。之前我为Tkinter做了一些事情,其中所有回调都通过一个记录操作的类。不幸的是,我的班级做日志记录有点难看,我正在寻找一个更好的。虽然这确实将gui与其余代码完美分离,但在通常的信号/插槽布线方面似乎并不常见。还有更好的方法吗?
目的是用户可以通过图形界面中的数据分析过程,看到他们的决定的影响。之后,记录的程序可以应用于其他数据,只需稍加修改,无需启动gui。
答案 0 :(得分:1)
高层思考,这就是我要做的事情:
开发一个装饰器函数,用它来装饰每个事件处理函数。
这个装饰器函数会记录调用的函数及其参数(可能返回值)在统一的数据结构中 - 注意在这个数据结构上,将Widget和Control实例标记为一种特殊类型的对象。那是因为在其他运行中这些小部件将不是相同的实例 - 啊,你甚至无法序列化工具包小部件实例,无论是Qt还是其他。
当播放宏的时候,你填补了用实际运行的对象的实例替换小部件表示对象的空白,并简单地用剩余的参数调用原始函数。
在具有传递给事件处理函数的专用“事件”参数的工具包中,您还必须负责序列化和反序列化此事件。
我希望这可以提供帮助。我可以为它提出一些概念代码的证明(虽然我现在有心情使用tkinter - 需要阅读很多内容才能得出Qt4示例)。
答案 1 :(得分:1)
您可以应用命令设计模式:当用户执行操作时,生成表示所需更改的命令。然后,您实现某种命令管道,它自己执行命令,很可能只是调用您已有的方法。执行命令后,您可以按需要序列化它们或记录它们,并在需要重新执行该过程时加载一系列命令。
答案 2 :(得分:0)
您正在寻找的一个例子是mayavi2。出于您的目的,mayavi2的“脚本记录”功能将生成一个Python脚本,然后可以对其他情况进行简单修改。我听说它运作得很好。