使用Python構建一個簡單的批處理GUI工具
在許多工作流程中,我們都會遇到需要重復執(zhí)行的一系列任務。手動執(zhí)行這些步驟可能既繁瑣又容易出錯。自動化此類序列可以顯著提高生產力。這篇博文將深入探討一個 Python 腳本,該腳本使用 wxPython 庫創(chuàng)建了一個圖形用戶界面 (GUI),用于定義、管理、保存、加載和執(zhí)行批處理計劃,并具備日志記錄和定時執(zhí)行功能。
C:\pythoncode\new\Batch OperatorGUI.py
核心思想:批處理計劃
基本概念是一個“批處理計劃”,它其實就是一個有序的步驟列表。每個步驟代表要執(zhí)行的單個操作。該工具允許用戶:
- 定義步驟: 指定操作類型以及任何必要的參數(如文件路徑、URL 或消息)。
- 管理步驟: 在計劃中添加、編輯、刪除、暫時禁用(“作廢”)和重新啟用步驟。
- 持久化計劃: 將定義的步驟序列保存到文件,并在以后加載回來。
- 執(zhí)行計劃: 按定義的順序運行活動步驟。
- 記錄結果: 可選擇地記錄執(zhí)行期間哪些步驟成功或失敗。
- 計劃執(zhí)行: 設置一個特定時間讓計劃自動運行。
代碼解析
讓我們看看 Python 腳本的關鍵組成部分。
1. Step
類:代表單個任務
class Step: def __init__(self, action_type, parameter, status="正常"): self.action_type = action_type # 動作類型 self.parameter = parameter # 參數 self.status = status # 狀態(tài):"正常" 或 "作廢" def to_dict(self): # 將 Step 對象轉換為字典,以便 JSON 保存 return { "action_type": self.action_type, "parameter": self.parameter, "status": self.status } @staticmethod def from_dict(d): # 從字典(從 JSON 加載)創(chuàng)建 Step 對象 # 優(yōu)雅地處理加載舊的或簡化數據格式的可能性 if isinstance(d, dict): return Step(d.get("action_type", "未知操作"), # 如果沒有,默認為 "未知操作" d.get("parameter", ""), d.get("status", "正常")) # 如果沒有,默認為 "正常" else: # 如果加載的數據不是字典,則將其視為手動提示 return Step("人工提示", str(d), "正常") # 動作類型為 "人工提示",狀態(tài)為 "正常"
這個類是一個簡單的數據結構,用于保存每個步驟的基本信息:
action_type
:是什么類型的操作(例如,“運行Python腳本”、“打開文件”)。parameter
:操作所需的數據(例如,腳本路徑、文件路徑、URL 或給用戶的消息)。status
:步驟是活動的(“正常”)還是非活動的(“作廢”)。
to_dict
和 from_dict
方法對于使用 JSON 序列化來保存和加載計劃至關重要。值得注意的是,from_dict
包含了回退邏輯,用于處理加載的數據可能不是字典的情況,將其轉換為“人工提示”步驟。
2. MainFrame
類:GUI 引擎
這個繼承自 wx.Frame
的類是應用程序的核心。
初始化 (
__init__
):- 設置主窗口 (
wx.Frame
)。 - 創(chuàng)建所有必要的 GUI 控件(widget):用于操作的按鈕 (
wx.Button
)、顯示步驟的列表框 (wx.ListBox
)、用于日志記錄和調度的復選框 (wx.CheckBox
)、用于定時時間的文本控件 (wx.TextCtrl
) 以及進度條 (wx.Gauge
)。 - 使用
wx.BoxSizer
進行布局管理,將這些控件整齊地排列。 - 將用戶交互(如按鈕點擊)綁定到相應的處理方法(例如,
btn_add.Bind(wx.EVT_BUTTON, self.on_add)
)。 - 初始化
self.steps = []
以存儲Step
對象列表。 - 設置一個
wx.Timer
以定期檢查計劃的執(zhí)行時間。
- 設置主窗口 (
步驟管理方法 (
on_add
,on_edit
,on_delete
,on_void
,on_recover
):on_add
/on_edit
:這些方法打開StepDialog
(稍后討論)以獲取用戶輸入,用于創(chuàng)建新步驟或修改現有步驟。然后它們更新self.steps
列表并調用self.refresh_list
。on_delete
:從self.steps
中刪除選定的步驟。on_void
/on_recover
:將選定步驟的status
屬性修改為“作廢”或“正常”。refresh_list
:清除self.listbox
并使用self.steps
中的當前步驟重新填充它,顯示每個步驟的狀態(tài)、操作類型和參數。
持久化 (
on_save
,on_load
):on_save
:遍歷self.steps
,使用step.to_dict()
將每個Step
對象轉換為字典,并使用json
庫將生成的字典列表保存到 “批處理計劃.json” 文件中。on_load
:讀取 “批處理計劃.json” 文件,解析 JSON 數據,使用Step.from_dict()
將每個字典轉換回Step
對象,更新self.steps
,并刷新列表框。包含文件不存在時的基本錯誤處理。
執(zhí)行邏輯 (
on_run
,execute_all_steps
,execute_step
):on_run
:通過調用execute_all_steps
來觸發(fā)主要的執(zhí)行邏輯。execute_all_steps
:- 計算狀態(tài)為“正常”(活動)的步驟數量。
- 遍歷
self.steps
列表。 - 如果步驟的狀態(tài)是“正常”,則在
try...except
塊內調用execute_step
以處理潛在的運行時錯誤。 - 更新
self.gauge
進度條。 - 使用
wx.Yield()
:這在 GUI 應用程序執(zhí)行長任務時很重要。它允許 GUI 事件循環(huán)處理掛起的事件,保持窗口響應并防止其看起來“凍結”。 - 將每個步驟的成功或失敗(如果失敗,則包括錯誤消息)記錄到一個臨時列表中。
- 如果勾選了“保存日志”復選框,則將收集到的日志條目追加到 “執(zhí)行日志.txt” 文件中。
- 顯示完成消息。
execute_step
:這是根據step.action_type
執(zhí)行實際操作的地方:- “運行Python腳本”:使用
subprocess.Popen
運行 Python 腳本。 - “打開文件”:使用
os.startfile
(Windows 特定,相當于雙擊文件)。 - “運行外部程序”:對于 URL(以 “http” 開頭)使用
webbrowser.open
,對于其他可執(zhí)行文件/命令使用subprocess.Popen
。 - “人工提示”:顯示一個簡單的消息框 (
wx.MessageBox
),需要用戶交互。
- “運行Python腳本”:使用
計劃任務 (
on_toggle_timer
,check_time
):on_toggle_timer
:根據“啟用定時執(zhí)行”復選框的狀態(tài)啟動或停止self.timer
。計時器設置為每 60000 毫秒(1 分鐘)觸發(fā)一次。check_time
:當計時器處于活動狀態(tài)時,此方法每分鐘被調用一次。它將當前時間(HH:MM 格式)與self.time_picker
文本控件中指定的時間進行比較。如果匹配,則觸發(fā)execute_all_steps
。
3. StepDialog
類:用戶輸入表單
class StepDialog(wx.Dialog): # ... (初始化代碼設置了標簽、選擇控件、文本控件、確定/取消按鈕) ... def get_data(self): # 返回用戶選擇的動作類型和輸入的參數文本 return self.action_choice.GetStringSelection(), self.parameter_text.GetValue()
這個簡單的對話框提供了一個表單,供用戶:
- 從下拉列表 (
wx.Choice
) 中選擇action_type
。 - 輸入
parameter
文本 (wx.TextCtrl
)。
當用戶點擊“確定”時,MainFrame
使用get_data
方法來檢索輸入的值。
4. 主執(zhí)行塊 (if __name__ == "__main__":
)
這個標準的 Python 結構確保以下代碼僅在腳本直接執(zhí)行時運行:
- 創(chuàng)建
wx.App
對象,這是任何wxPython
應用程序所必需的。 - 實例化
MainFrame
。 - 使框架可見 (
frame.Show()
)。 - 啟動
wxPython
事件循環(huán) (app.MainLoop()
),它監(jiān)聽用戶交互和系統(tǒng)事件。
運行結果
以上就是使用Python構建一個簡單的批處理GUI工具的詳細內容,更多關于Python構建GUI工具的資料請關注腳本之家其它相關文章!
相關文章
Python Miniforge3 環(huán)境配置的實現
這篇文章主要介紹了Python Miniforge3 環(huán)境配置的實現,小編覺得挺不錯的,現在分享給大家,也給大家做個參考,一起跟隨小編過來看看吧2017-11-11