2011-02-23 29 views
2

我想知道如何去執行一個python gui的宏記錄器(可能是PyQt,但理想情況下是不可知的)。就像在Excel中一樣,但不是獲取VB宏,它會創建Python代碼。以前我爲Tkinter做過一些事情,所有的回調都通過一個記錄行爲的類。不幸的是,我的班級做日誌記錄有點難看,我正在尋找一個更好的。雖然這確實使得gui與其他代碼很好地分離,但在通常的信號/插槽接線方面似乎是不尋常的。有沒有更好的辦法?爲python實現宏記錄器?

其意圖是用戶可以通過圖形界面中的數據分析過程來查看他們的決定的影響。後來錄製的程序可以適用於其他數據,只需稍作修改,不需要啓動gui。

回答

1

高層次的思維,這是我會怎麼做:

制定一個裝飾作用,與我裝點每一個事件處理函數。

這個裝飾器函數會記錄所調用的函數及其參數(並可能返回值)在一個統一的數據結構中 - 在此數據結構中注意將Widget和Control實例標記爲特殊類型的目的。這是因爲在其他運行中,這些小部件將不會是相同的實例 - 啊,甚至無法序列化一個工具包小部件實例,無論是Qt還是其他。

當需要播放一個宏的時候,用實際運行的對象的實例來填充代替widget表示對象的間隙,並簡單地用剩下的參數調用原始函數。

在具有傳遞給事件處理函數的專用「事件」參數的工具包中,您還必須負責序列化和反序列化此事件。

我希望這可以提供幫助。我可以想出一些概念驗證碼(儘管我現在有一種心情在今天使用tkinter - 必須閱讀很多才能提出Qt4示例)。

1

您可以應用命令設計模式:當您的用戶執行某個操作時,生成一個代表所需更改的命令。然後你實現某種類型的命令管道,它自己執行命令,很可能只是調用你已有的方法。一旦執行了這些命令,就可以序列化它們或按照需要記錄它們,並在需要重新執行該過程時加載一系列命令。

0

你要找的一個例子是mayavi2。出於您的目的,mayavi2的「腳本記錄」功能將生成一個Python腳本,然後可以對其他情況進行簡單修改。我聽說它工作得很好。