欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python創(chuàng)建exe運行器和截圖工具的示例詳解

 更新時間:2024年10月21日 10:48:20   作者:winfredzhang  
本文我們將探討如何使用Python和wxPython創(chuàng)建一個強大而實用的桌面應用程序,可以遍歷指定文件夾中的所有EXE文件,感興趣的小伙伴可以了解一下

在今天的博客中,我們將探討如何使用Python和wxPython創(chuàng)建一個強大而實用的桌面應用程序。這個應用程序可以遍歷指定文件夾中的所有EXE文件,并提供運行這些文件和自動截圖的功能。無論你是系統(tǒng)管理員、軟件測試人員,還是僅僅對自動化工具感興趣的開發(fā)者,這個項目都會給你帶來啟發(fā)。

C:\pythoncode\new\runfolderexeandsnapshot.py

功能概述

我們的應用程序具有以下主要功能:

  • 選擇文件夾并遍歷其中的所有EXE文件(包括子文件夾)
  • 在列表框中顯示找到的EXE文件
  • 雙擊列表項運行對應的EXE文件
  • 一鍵運行所有找到的EXE文件
  • 自動為每個運行的程序截圖
  • 將截圖以原EXE文件名保存在指定位置

技術(shù)棧

為了實現(xiàn)這些功能,我們使用了以下Python庫:

  • wxPython: 用于創(chuàng)建圖形用戶界面
  • os: 用于文件系統(tǒng)操作
  • subprocess: 用于運行外部程序
  • pyautogui: 用于屏幕截圖
  • PIL (Python Imaging Library): 用于圖像處理

全部代碼

import wx
import os
import subprocess
import pyautogui
from PIL import Image

class MainFrame(wx.Frame):
    def __init__(self):
        super().__init__(parent=None, title='EXE Runner and Screenshot Tool')
        panel = wx.Panel(self)
        
        self.list_box = wx.ListBox(panel, pos=(5, 35), size=(350, 300), style=wx.LB_SINGLE)
        self.list_box.Bind(wx.EVT_LISTBOX_DCLICK, self.on_dclick)
        
        select_btn = wx.Button(panel, label='選擇文件夾', pos=(5, 5), size=(100, 25))
        select_btn.Bind(wx.EVT_BUTTON, self.on_select)
        
        run_all_btn = wx.Button(panel, label='運行全部', pos=(110, 5), size=(100, 25))
        run_all_btn.Bind(wx.EVT_BUTTON, self.on_run_all)
        
        self.SetSize((360, 375))
        self.Centre()
        
    def on_select(self, event):
        dlg = wx.DirDialog(self, "選擇一個文件夾", style=wx.DD_DEFAULT_STYLE)
        if dlg.ShowModal() == wx.ID_OK:
            self.folder_path = dlg.GetPath()
            self.exe_files = self.get_exe_files(self.folder_path)
            self.list_box.Set(self.exe_files)
        dlg.Destroy()
        
    def get_exe_files(self, folder):
        exe_files = []
        for root, dirs, files in os.walk(folder):
            for file in files:
                if file.endswith('.exe'):
                    exe_files.append(os.path.join(root, file))
        return exe_files
        
    def on_dclick(self, event):
        index = event.GetSelection()
        self.run_exe(self.exe_files[index])
        
    def on_run_all(self, event):
        for exe in self.exe_files:
            self.run_exe(exe)
            
    def run_exe(self, exe_path):
        try:
            subprocess.Popen(exe_path)
            wx.Sleep(2)  # 等待程序啟動
            self.take_screenshot(exe_path)
        except Exception as e:
            wx.MessageBox(f"運行 {exe_path} 時出錯: {str(e)}", "錯誤", wx.OK | wx.ICON_ERROR)
            
    def take_screenshot(self, exe_path):
        screenshot = pyautogui.screenshot()
        exe_name = os.path.splitext(os.path.basename(exe_path))[0]
        screenshot_folder = os.path.join(os.path.dirname(exe_path), "screenshot")
        if not os.path.exists(screenshot_folder):
            os.makedirs(screenshot_folder)
        screenshot_path = os.path.join(screenshot_folder, f"{exe_name}.png")
        screenshot.save(screenshot_path)

if __name__ == '__main__':
    app = wx.App()
    frame = MainFrame()
    frame.Show()
    app.MainLoop()

代碼解析

讓我們深入了解代碼的關(guān)鍵部分:

1. 用戶界面

我們使用wxPython創(chuàng)建了一個簡潔的用戶界面,包含一個列表框和兩個按鈕:

class MainFrame(wx.Frame):
    def __init__(self):
        super().__init__(parent=None, title='EXE Runner and Screenshot Tool')
        panel = wx.Panel(self)
        
        self.list_box = wx.ListBox(panel, pos=(5, 35), size=(350, 300), style=wx.LB_SINGLE)
        self.list_box.Bind(wx.EVT_LISTBOX_DCLICK, self.on_dclick)
        
        select_btn = wx.Button(panel, label='選擇文件夾', pos=(5, 5), size=(100, 25))
        select_btn.Bind(wx.EVT_BUTTON, self.on_select)
        
        run_all_btn = wx.Button(panel, label='運行全部', pos=(110, 5), size=(100, 25))
        run_all_btn.Bind(wx.EVT_BUTTON, self.on_run_all)

2. 文件遍歷

我們使用os.walk()來遞歸遍歷文件夾及其子文件夾,查找所有的EXE文件:

def get_exe_files(self, folder):
    exe_files = []
    for root, dirs, files in os.walk(folder):
        for file in files:
            if file.endswith('.exe'):
                exe_files.append(os.path.join(root, file))
    return exe_files

3. 運行EXE文件

我們使用subprocess.Popen()來運行EXE文件:

def run_exe(self, exe_path):
    try:
        subprocess.Popen(exe_path)
        wx.Sleep(2)  # 等待程序啟動
        self.take_screenshot(exe_path)
    except Exception as e:
        wx.MessageBox(f"運行 {exe_path} 時出錯: {str(e)}", "錯誤", wx.OK | wx.ICON_ERROR)

4. 屏幕截圖

我們使用pyautogui來捕獲屏幕截圖,并使用PIL來保存圖像:

def take_screenshot(self, exe_path):
    screenshot = pyautogui.screenshot()
    exe_name = os.path.splitext(os.path.basename(exe_path))[0]
    screenshot_folder = os.path.join(os.path.dirname(exe_path), "screenshot")
    if not os.path.exists(screenshot_folder):
        os.makedirs(screenshot_folder)
    screenshot_path = os.path.join(screenshot_folder, f"{exe_name}.png")
    screenshot.save(screenshot_path)

潛在應用場景

這個工具可以在多種場景下發(fā)揮作用:

軟件測試: 自動運行多個程序并捕獲截圖,可以大大提高測試效率。

系統(tǒng)管理: 快速查看和運行系統(tǒng)中的可執(zhí)行文件,對系統(tǒng)管理員很有幫助。

軟件開發(fā): 在開發(fā)過程中快速測試和記錄多個可執(zhí)行文件的運行狀態(tài)。

教育: 作為一個教學工具,展示如何使用Python創(chuàng)建實用的桌面應用程序。

改進空間

雖然這個工具已經(jīng)相當實用,但仍有一些可以改進的地方:

  • 添加進度條,顯示當前正在運行的程序和截圖進度。
  • 實現(xiàn)更靈活的截圖時間控制,因為不同程序可能需要不同的啟動時間。
  • 添加選項來自動關(guān)閉運行的程序。
  • 實現(xiàn)更robust的錯誤處理和日志記錄機制。
  • 添加對非EXE文件的支持,如批處理文件或其他可執(zhí)行文件。

運行結(jié)果

到此這篇關(guān)于Python創(chuàng)建exe運行器和截圖工具的示例詳解的文章就介紹到這了,更多相關(guān)Python創(chuàng)建exe運行器內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 詳解django中使用定時任務的方法

    詳解django中使用定時任務的方法

    在本篇文章中我們給大家介紹了關(guān)于django中使用定時任務的方法的相關(guān)知識點,有需要的朋友們參考下。
    2018-09-09
  • 解決pycharm同一目錄下無法import其他文件

    解決pycharm同一目錄下無法import其他文件

    今天小編就為大家分享一篇解決pycharm同一目錄下無法import其他文件,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-02-02
  • Python干貨實戰(zhàn)之八音符醬小游戲全過程詳解

    Python干貨實戰(zhàn)之八音符醬小游戲全過程詳解

    讀萬卷書不如行萬里路,只學書上的理論是遠遠不夠的,只有在實戰(zhàn)中才能獲得能力的提升,本篇文章手把手帶你用Python實現(xiàn)一個八音符醬小游戲,大家可以在過程中查缺補漏,提升水平
    2021-10-10
  • Python logging管理不同級別log打印和存儲實例

    Python logging管理不同級別log打印和存儲實例

    這篇文章主要介紹了Python logging管理不同級別log打印和存儲實例,具有一定借鑒價值,需要的朋友可以參考下
    2018-01-01
  • Python調(diào)用百度根據(jù)經(jīng)緯度查詢地址的示例代碼

    Python調(diào)用百度根據(jù)經(jīng)緯度查詢地址的示例代碼

    今天小編就為大家分享一篇Python調(diào)用百度根據(jù)經(jīng)緯度查詢地址的示例代碼,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-07-07
  • Dialog 按照順序彈窗的優(yōu)雅寫法

    Dialog 按照順序彈窗的優(yōu)雅寫法

    這篇文章主要介紹了Dialog 按照順序彈窗的寫法及示例,給大家介紹了DrawType的使用方式,需要的朋友可以參考下
    2021-09-09
  • pandas中read_csv的缺失值處理方式

    pandas中read_csv的缺失值處理方式

    今天小編就為大家分享一篇pandas中read_csv的缺失值處理方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-12-12
  • 詳解Python NumPy中矩陣和通用函數(shù)的使用

    詳解Python NumPy中矩陣和通用函數(shù)的使用

    在NumPy中,矩陣是ndarray的子類,與數(shù)學概念中的矩陣一樣,NumPy中的矩陣也是二維的,可以使用 mat 、 matrix 以及 bmat 函數(shù)來創(chuàng)建矩陣。本文將詳細講解NumPy中矩陣和通用函數(shù)的使用,感興趣的可以了解一下
    2022-06-06
  • flask實現(xiàn)驗證碼并驗證功能

    flask實現(xiàn)驗證碼并驗證功能

    Flask是一個用Python編寫的Web應用程序框架,F(xiàn)lask是python的web框架,最大的特征是輕便,讓開發(fā)者自由靈活的兼容要開發(fā)的feature。這篇文章主要介紹了flask實現(xiàn)驗證碼并驗證,需要的朋友可以參考下
    2019-12-12
  • 使用Keras實現(xiàn)Tensor的相乘和相加代碼

    使用Keras實現(xiàn)Tensor的相乘和相加代碼

    這篇文章主要介紹了使用Keras實現(xiàn)Tensor的相乘和相加代碼,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-06-06

最新評論