使用Python构建一个简单的批处理GUI工具

作者:

文章目录
  • 基本概念是一个“批处理计划”,它其实就是一个有序的步骤列表。每个步骤代表要执行的单个操作。该工具允许用户: 定义步骤: 指定操作类型以及任何必要的参数(如文件路径、URL 或消息)。 管理步骤: 在计划中添加、编辑、删除、暂时禁用(“作废”)和重新启用步骤。 持久化计划: 将定义的步骤序列保存到文件,并在以后加载回来。 执行计划: 按定义的顺序运行活动步骤。 记录结果: 可选择地记录执行期间哪些步骤成功或失败。 计划执行: 设置一个特定时间让计划自动运行。
  • 让我们看看 Python 脚本的关键组成部分。 1. Step 类:代表单个任务 class Step: def __init__(self, action_type, parameter, status=”正常”): self.action_type = action_type # 动作类型 self.parameter = parameter # 参数 self.status = status # 状态:”正常” 或 “作废” def to_dict(self): # 将 Step 对象转换为字典,以便 JSON 保存 return { “action_type”: self.action_type, “parameter”: self.parameter, “status”: self.status } @staticmethod def from_dict(d): # 从字典(从 JSON 加载)创建 Step 对象 # 优雅地处理加载旧的或简化数据格式的可能性 if isinstance(d, dict): return Step(d.get(“action_type”, “未知操作”), # 如果没有,默认为 “未知操作” d.get(“parameter”, “”), d.get(“status”, “正常”)) # 如果没有,默认为 “正常” else: # 如果加载的数据不是字典,则将其视为手动提示 return Step(“人工提示”, str(d), “正常”) # 动作类型为 “人工提示”,状态为 “正常” 这个类是一个简单的数据结构,用于保存每个步骤的基本信息: action_type:是什么类型的操作(例如,“运行Python脚本”、“打开文件”)。 parameter:操作所需的数据(例如,脚本路径、文件路径、URL 或给用户的消息)。 status:步骤是活动的(“正常”)还是非活动的(“作废”)。 to_dict 和 from_dict 方法对于使用 JSON 序列化来保存和加载计划至关重要。值得注意的是,from_dict 包含了回退逻辑,用于处理加载的数据可能不是字典的情况,将其转换为“人工提示”步骤。 2. MainFrame 类:GUI 引擎 这个继承自 wx.Frame 的类是应用程序的核心。 初始化 (__init__): 设置主窗口 (wx.Frame)。 创建所有必要的 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 以定期检查计划的执行时间。 步骤管理方法 (on_add, on_edit, on_delete, on_void, on_recover): on_add/on_edit:这些方法打开 StepDialog(稍后讨论)以获取用户输入,用于创建新步骤或修改现有步骤。然后它们更新 self.steps 列表并调用 self.refresh_list。 on_delete:从 self.steps 中删除选定的步骤。 on_void/on_recover:将选定步骤的 status 属性修改为“作废”或“正常”。 refresh_list:清除 self.listbox 并使用 self.steps 中的当前步骤重新填充它,显示每个步骤的状态、操作类型和参数。 持久化 (on_save, on_load): on_save:遍历 self.steps,使用 step.to_dict() 将每个 Step 对象转换为字典,并使用 json 库将生成的字典列表保存到 “批处理计划.json” 文件中。 on_load:读取 “批处理计划.json” 文件,解析 JSON 数据,使用 Step.from_dict() 将每个字典转换回 Step 对象,更新 self.steps,并刷新列表框。包含文件不存在时的基本错误处理。 执行逻辑 (on_run, execute_all_steps, execute_step): on_run:通过调用 execute_all_steps 来触发主要的执行逻辑。 execute_all_steps: 计算状态为“正常”(活动)的步骤数量。 遍历 self.steps 列表。 如果步骤的状态是“正常”,则在 try…except 块内调用 execute_step 以处理潜在的运行时错误。 更新 self.gauge 进度条。 使用 wx.Yield():这在 GUI 应用程序执行长任务时很重要。它允许 GUI 事件循环处理挂起的事件,保持窗口响应并防止其看起来“冻结”。 将每个步骤的成功或失败(如果失败,则包括错误消息)记录到一个临时列表中。 如果勾选了“保存日志”复选框,则将收集到的日志条目追加到 “执行日志.txt” 文件中。 显示完成消息。 execute_step:这是根据 step.action_type 执行实际操作的地方: “运行Python脚本”:使用 subprocess.Popen 运行 Python 脚本。 “打开文件”:使用 os.startfile(Windows 特定,相当于双击文件)。 “运行外部程序”:对于 URL(以 “http” 开头)使用 webbrowser.open,对于其他可执行文件/命令使用 subprocess.Popen。 “人工提示”:显示一个简单的消息框 (wx.MessageBox),需要用户交互。 计划任务 (on_toggle_timer, check_time): on_toggle_timer:根据“启用定时执行”复选框的状态启动或停止 self.timer。计时器设置为每 60000 毫秒(1 分钟)触发一次。 check_time:当计时器处于活动状态时,此方法每分钟被调用一次。它将当前时间(HH:MM 格式)与 self.time_picker 文本控件中指定的时间进行比较。如果匹配,则触发 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. 主执行块 (if __name__ == "__main__":) 这个标准的 Python 结构确保以下代码仅在脚本直接执行时运行: 创建 wx.App 对象,这是任何 wxPython 应用程序所必需的。 实例化 MainFrame。 使框架可见 (frame.Show())。 启动 wxPython 事件循环 (app.MainLoop()),它监听用户交互和系统事件。
  • 以上就是使用Python构建一个简单的批处理GUI工具的详细内容,更多关于Python构建GUI工具的资料请关注风君子博客其它相关文章! 您可能感兴趣的文章: 使用python和asyncio打造接口并发测试GUI工具 使用Python结合Tkinter和PyAutoGUI开发精确截图工具 使用Python构建带GUI的邮件自动发送工具 Python GUI布局工具Tkinter入门之旅 基于Python3制作一个带GUI界面的小说爬虫工具
  • 目录
    • 核心思想:批处理计划
    • 代码解析
    • 运行结果

    在许多工作流程中,我们都会遇到需要重复执行的一系列任务。手动执行这些步骤可能既繁琐又容易出错。自动化此类序列可以显著提高生产力。这篇博文将深入探讨一个 Python 脚本,该脚本使用 wxPython 库创建了一个图形用户界面 (GUI),用于定义、管理、保存、加载和执行批处理计划,并具备日志记录和定时执行功能。
    C:pythoncodenewBatch OperatorGUI.py

    基本概念是一个“批处理计划”,它其实就是一个有序的步骤列表。每个步骤代表要执行的单个操作。该工具允许用户:

    1. 定义步骤: 指定操作类型以及任何必要的参数(如文件路径、URL 或消息)。
    2. 管理步骤: 在计划中添加、编辑、删除、暂时禁用(“作废”)和重新启用步骤。
    3. 持久化计划: 将定义的步骤序列保存到文件,并在以后加载回来。
    4. 执行计划: 按定义的顺序运行活动步骤。
    5. 记录结果: 可选择地记录执行期间哪些步骤成功或失败。
    6. 计划执行: 设置一个特定时间让计划自动运行。

    让我们看看 Python 脚本的关键组成部分。

    1. Step 类:代表单个任务

    class Step:
        def __init__(self, action_type, parameter, status="正常"):
            self.action_type = action_type # 动作类型
            self.parameter = parameter   # 参数
            self.status = status         # 状态:"正常" 或 "作废"
    
        def to_dict(self):
            # 将 Step 对象转换为字典,以便 JSON 保存
            return {
                "action_type": self.action_type,
                "parameter": self.parameter,
                "status": self.status
            }
    
        @staticmethod
        def from_dict(d):
            # 从字典(从 JSON 加载)创建 Step 对象
            # 优雅地处理加载旧的或简化数据格式的可能性
            if isinstance(d, dict):
                return Step(d.get("action_type", "未知操作"), # 如果没有,默认为 "未知操作"
                            d.get("parameter", ""),
                            d.get("status", "正常")) # 如果没有,默认为 "正常"
            else:
                # 如果加载的数据不是字典,则将其视为手动提示
                return Step("人工提示", str(d), "正常") # 动作类型为 "人工提示",状态为 "正常"
    

    这个类是一个简单的数据结构,用于保存每个步骤的基本信息:

    • action_type:是什么类型的操作(例如,“运行Python脚本”、“打开文件”)。
    • parameter:操作所需的数据(例如,脚本路径、文件路径、URL 或给用户的消息)。
    • status:步骤是活动的(“正常”)还是非活动的(“作废”)。

    to_dict 和 from_dict 方法对于使用 JSON 序列化来保存和加载计划至关重要。值得注意的是,from_dict 包含了回退逻辑,用于处理加载的数据可能不是字典的情况,将其转换为“人工提示”步骤。

    2. MainFrame 类:GUI 引擎

    这个继承自 wx.Frame 的类是应用程序的核心。

    • 初始化 (__init__)

      • 设置主窗口 (wx.Frame)。
      • 创建所有必要的 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 以定期检查计划的执行时间。
    • 步骤管理方法 (on_addon_editon_deleteon_voidon_recover)

      • on_add/on_edit:这些方法打开 StepDialog(稍后讨论)以获取用户输入,用于创建新步骤或修改现有步骤。然后它们更新 self.steps 列表并调用 self.refresh_list
      • on_delete:从 self.steps 中删除选定的步骤。
      • on_void/on_recover:将选定步骤的 status 属性修改为“作废”或“正常”。
      • refresh_list:清除 self.listbox 并使用 self.steps 中的当前步骤重新填充它,显示每个步骤的状态、操作类型和参数。
    • 持久化 (on_saveon_load)

      • on_save:遍历 self.steps,使用 step.to_dict() 将每个 Step 对象转换为字典,并使用 json 库将生成的字典列表保存到 “批处理计划.json” 文件中。
      • on_load:读取 “批处理计划.json” 文件,解析 JSON 数据,使用 Step.from_dict() 将每个字典转换回 Step 对象,更新 self.steps,并刷新列表框。包含文件不存在时的基本错误处理。
    • 执行逻辑 (on_runexecute_all_stepsexecute_step)

      • on_run:通过调用 execute_all_steps 来触发主要的执行逻辑。
      • execute_all_steps
        • 计算状态为“正常”(活动)的步骤数量。
        • 遍历 self.steps 列表。
        • 如果步骤的状态是“正常”,则在 try...except 块内调用 execute_step 以处理潜在的运行时错误。
        • 更新 self.gauge 进度条。
        • 使用 wx.Yield():这在 GUI 应用程序执行长任务时很重要。它允许 GUI 事件循环处理挂起的事件,保持窗口响应并防止其看起来“冻结”。
        • 将每个步骤的成功或失败(如果失败,则包括错误消息)记录到一个临时列表中。
        • 如果勾选了“保存日志”复选框,则将收集到的日志条目追加到 “执行日志.txt” 文件中。
        • 显示完成消息。
      • execute_step:这是根据 step.action_type 执行实际操作的地方:
        • “运行Python脚本”:使用 subprocess.Popen 运行 Python 脚本。
        • “打开文件”:使用 os.startfile(Windows 特定,相当于双击文件)。
        • “运行外部程序”:对于 URL(以 “http” 开头)使用 webbrowser.open,对于其他可执行文件/命令使用 subprocess.Popen
        • “人工提示”:显示一个简单的消息框 (wx.MessageBox),需要用户交互。
    • 计划任务 (on_toggle_timercheck_time)

      • on_toggle_timer:根据“启用定时执行”复选框的状态启动或停止 self.timer。计时器设置为每 60000 毫秒(1 分钟)触发一次。
      • check_time:当计时器处于活动状态时,此方法每分钟被调用一次。它将当前时间(HH:MM 格式)与 self.time_picker 文本控件中指定的时间进行比较。如果匹配,则触发 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. 主执行块 (if __name__ == "__main__":)

    这个标准的 Python 结构确保以下代码仅在脚本直接执行时运行:

    • 创建 wx.App 对象,这是任何 wxPython 应用程序所必需的。
    • 实例化 MainFrame
    • 使框架可见 (frame.Show())。
    • 启动 wxPython 事件循环 (app.MainLoop()),它监听用户交互和系统事件。

    以上就是使用Python构建一个简单的批处理GUI工具的详细内容,更多关于Python构建GUI工具的资料请关注风君子博客其它相关文章!

    您可能感兴趣的文章:

    • 使用python和asyncio打造接口并发测试GUI工具
    • 使用Python结合Tkinter和PyAutoGUI开发精确截图工具
    • 使用Python构建带GUI的邮件自动发送工具
    • Python GUI布局工具Tkinter入门之旅
    • 基于Python3制作一个带GUI界面的小说爬虫工具

    站内搜索