Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为python gui实现宏记录器?_Python_User Interface_Macros_Recorder - Fatal编程技术网

为python gui实现宏记录器?

为python gui实现宏记录器?,python,user-interface,macros,recorder,Python,User Interface,Macros,Recorder,我想知道如何为python gui(可能是PyQt,但理想情况下是不可知的)实现一个宏记录器。类似于Excel中的东西,但它不会获得VB宏,而是创建python代码。之前我为Tkinter做了一些事情,其中所有回调都通过一个记录操作的类。不幸的是,我做日志记录的班级有点难看,我正在寻找一个更好的。虽然这确实很好地将gui与代码的其余部分分开,但就通常的信号/插槽布线而言,这似乎是不寻常的。有更好的办法吗 其目的是用户可以在图形界面中以自己的方式完成数据分析过程,查看其决策的效果。稍后,记录的过程

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


其目的是用户可以在图形界面中以自己的方式完成数据分析过程,查看其决策的效果。稍后,记录的过程可以应用于其他数据,只需稍加修改,而无需启动gui

从高层次思考,我会这样做:

开发一个decorator函数,我用它来修饰每个事件处理函数

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

当播放宏时,用实际运行的对象的实例替换代表对象的小部件来填补空白,并用剩余的参数调用原始函数

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


我希望这能有所帮助。我可以为此提供一些概念验证代码(尽管我今天很想使用tkinter,但要想得到一个Qt4示例还需要大量阅读)。

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

中有一个您正在寻找的示例。出于您的目的,mayavi2的“脚本记录”功能将生成一个Python脚本,该脚本可以在其他情况下进行简单的修改。我听说它工作得很好。

您好,这个功能在FreeCAD中实现得很好。对于用户的每个操作,Python控制台中都会显示一个Python命令。不幸的是,我不知道他们是怎么做到的,但我很乐意。