# python-WinGUI **Repository Path**: LinLuoup/python-win-gui ## Basic Information - **Project Name**: python-WinGUI - **Description**: No description available - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 2 - **Created**: 2025-01-30 - **Last Updated**: 2025-01-31 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # python自动化项目 ## 1、环境搭建 把压缩包解压到一个位置,作为项目本体,并使用开发环境打开,如PyCharm。 打开终端 ```cmd # 在终端中运行如下代码,利用environment.yml配置环境 conda env create -f environment.yml # 查看是否成功创建项目conda环境 conda env list # 进入已经创建好的gui环境 conda activate gui # 其中需要pip install安装的包大概率无法自动安装,需要手动,如: pip install colorama==0.4.6 pip install keyboard==0.13.5 # 等等,直至全部包环境安装完毕 ``` ## 2、第一次循环准备 先确定所需要操作的窗口的名称 ```python # 首先修改window_name参数,为所需要操作的窗口名称 window_name = "steam" # 再通过如下三行代码测试所找到的window_name是否为正确窗口名称 app = WinGUI(window_name) app.get_workscreen_screenshot() app.get_app_screenshot() # 若为正确名称,则会将所需要操作的窗口强制置在最前方,同时temp/app.png为对应窗口截图 ``` 再通过一系列键鼠、点击的结合达到自动化的功能 - 键盘操作 ```python # python的keyboard键盘快捷键 keyboard.press_and_release("ctrl+w") ``` - 鼠标点击 将所需要点击的按钮截图下来,并保存到`image/Run_Sequence01.png` ```python # app.click_icon("Run_Sequence01.png") ``` - 文本输入 文本输入部分,由于大部分文本输入框的内容是不确定的,所以无法通过类似于按钮定位的模式来进行确定坐标,但可以先定位输入框左边的标志,再通过指针偏移来确定输入框的位置 ![image-20250131014758083](https://typora-linluoup.oss-cn-nanjing.aliyuncs.com/image-20250131014758083.png) ```python x, y = app.locate_icon("First_Channel.png") app.move_and_click(x+50, y) keyboard.press_and_release("ctrl+a") keyboard.write("艾尔登法环") ``` - 文件移动 默认是每次循环都进行一次文件移动的,如果不需要操作文件的话,则将`running_program()`函数中的`move_files()`注释掉 ```python # suffix_list[]为缺省值,表示的是文件的后缀 # 默认是将原文件夹中的所有文件都移动到目标文件夹中,可通过suffix_list[]限制文件的类型 ``` 在完成一次循环操作的有机组合后,则需要将所有操作移动到`running_program`中 ```python # write your operations # usually use app functions # operation end ``` 也就是上述注释之间的位置 ## 3、循环条件控制 需要设置循环正在进行的判断,允许设置两个标志,保存到`image/test_over_flag01.png`与`image/test_over_flag02.png`下 ```python # 循环控制函数 is_test_over(app, "test_over_flag01.png", "test_over_flag02.png") ``` 注意,这里的`is_test_over()`函数我对其进行了修改,如下: ```python def is_test_over(app, test_over_flag01, test_over_flag02): valid1, _, _ = app.check_icon(test_over_flag01) if valid1: return False valid2, _, _ = app.check_icon(test_over_flag02) if valid2: return False else: return True return not valid2 ``` ## 4、异常处理 与第一次循环准备中的操作类似,当自动化操作进行的过程中可能会遇到一些突发情况,例如不定期突然产生一个弹窗需要进行点击、产生一个输入框需要输入等等 ```python # 则需要先自定义处理异常的过程,例如写一句点击按钮的代码来进行处理,如下: app.click_icon("Continue_at_Next_Point.png") # 并放入到running_program()函数的process abnormal cases中,如: try: app.click_icon("Continue_at_Next_Point.png") except: print() ```