Python+AutoIt实现界面工具开发过程详解


Posted in Python onAugust 07, 2019

前言

不同于Linux服务器上的命令行操作,在windows系统上用户的使用习惯还是倾向于使用有界面的工具。如果工具是命令行交互操作的方式,可能是有悖于在windows上使用的操作习惯,往往不容易推广使用。

由于需要维护测试部工具的原因,其中有一个工具是用AutoIt语言实现的,利用几天时间把工具源码学习了一下。发现使用AutoIt可以快速开发工具界面。当然它也能各种逻辑处理,而且也很方便。

但是考虑精力和学习成本,我主要使用AutoIt的方式还是利用它来实现界面开发以及学习基本的语法完成简单的逻辑处理,然后使用Python实现核心的业务处理逻辑。通过AutoIt调用函数执行Python编译后的可执行文件方式来完成工具需求的开发。

我想,本文最适合的读者是跟我一样有界面开发困难障碍的同学,又不想花太多时间去学其他界面实现开发的同学。这种方法有点投机取巧,不过是我恰好其他工具使用到了AutoIT,所以结合了使用。总的来说还是建议初学者学习使用Python界面工具开发,如PyQt。因为学习都是要精力和成本的。本文仅是提供一种思路。

AutoIt简述

AutoIt一个使用类似BASIC脚本语言的免费软件,语言简单、开发工具安装方便,帮助手册内容丰富。它设计用于Windows GUI(图形用户界面)中进行自动化操作。AutoIt官网: https://www.autoitscript.com/site/autoit  。

下面内容来自官网的介绍,如下:

Python+AutoIt实现界面工具开发过程详解

AutoIt工具安装

Auto工具从官网下载:https://www.autoitscript.com/site/autoit/downloads/。这里要注意的一点是要安装全量的AutoIt编辑器。把如下两个软件下载,安装步骤按照提示默认操作就可以完成。如果只安装第1个,就会缺少本文需要使用的Koda(FormDesigner)菜单栏。

Python+AutoIt实现界面工具开发过程详解

安装完成后,打开SciTE编辑器。检查是否包含Koda(FormDesigner)。路径:菜单栏Tools -> Koda(FormDesigner)。这就是AutoIt界面画图的工具,通过拖拽工具栏中的组件到主界面就可以实现。

Python+AutoIt实现界面工具开发过程详解

AutoIt界面绘制和对齐

AutoIt界面实现就是通过Koda(FormDesigner)界面中windows控件拖拽的主窗口中实现。Standard中有常用的windows窗体控件,包括Label、input、Edit、Button、CheckBox、RadioButton、ListBox、ComboBox、Contex Menu

Python+AutoIt实现界面工具开发过程详解

将需要的界面控件拖拽到主界面窗口后,就需要将按照实际需要对齐窗口。如下主界面有3个Lable标签和3个Input输入框。

Python+AutoIt实现界面工具开发过程详解

对齐方法为按住Shift键同时选中需要对齐操作的按钮,主要对齐方式如下):

Python+AutoIt实现界面工具开发过程详解

对齐方式的描述都有小图形,挺形象的,应该都知道每个对齐方式的作用了。可以自己拉几个控件下来,每个尝试一下看看效果。最终就能获取你想要的了。

当控件对齐完成之后。可以执行Tools -> Generate Form Code获取代码用于后续的编辑了。如下

#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#Region ### START Koda GUI section 
$Form1_1 = GUICreate("文件名替换工具", 446, 198, 218, 133)
$Label1 = GUICtrlCreateLabel("路径", 40, 32, 28, 17)
$Label2 = GUICtrlCreateLabel("旧字符串", 40, 80, 52, 17)
$Label3 = GUICtrlCreateLabel("新字符串", 40, 128, 52, 17)
$Input1 = GUICtrlCreateInput("", 120, 32, 257, 21)
$Input2 = GUICtrlCreateInput("", 120, 80, 257, 21)
$Input3 = GUICtrlCreateInput("", 120, 128, 257, 21)
$Button1 = GUICtrlCreateButton("确定", 112, 160, 57, 25)
$Button2 = GUICtrlCreateButton("退出", 224, 160, 65, 25)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###

While 1
  $nMsg = GUIGetMsg()
  Switch $nMsg
    Case $GUI_EVENT_CLOSE
      Exit

    Case $Label1
    Case $Label2
    Case $Label3
  EndSwitch
WEnd

AutoIt获取界面输入和调用外部命令

实现AutoIt界面,最主要是利用界面让用户输入相关的参数。那么程序中如何获取用户的输入?主要是通过GUICtrlRead()函数,如需要获取上述界面中用户输入的路径、旧字符串、新字符串。代码如下:

$file_path = GUICtrlRead($Input1)
$old_str = GUICtrlRead($Input2)
$new_str = GUICtrlRead($Input3)

获取到用户的输入参数后就可以将参数传递给Python实现的业务逻辑了。AutoIt可以利用Run()函数调用外部命令。如Run("notepad.exe", "", @SW_SHOWMAXIMIZED)。在使用Run()调用之前可以利用Pyinstaller工具将Python业务处理逻辑.py文件编译成可直接运行的.exe文件(编译方法可以参考使用Pyinstaller转换.py文件为.exe可执行程序)。这样就可以直接使用Run()函数调用实现了。

调用的外部程序获取参数的2种常见方式

1、界面输入参数少(0~3个)。如果界面输入参数很少,可以直接通过传参的方式完,注意观察下述调用AutoIt变量的方法。参考代码如下:

Run(@ComSpec & " /c " & "D:\temp\dist\process.exe " & '"'&$old_str&'"' & " " & '"'&$new_str&'"' & " " & '"'&$file_path&'"' ,"")

2、界面输入参数多(比如大于3个)

建议可以采用配置文件方式写入到.ini文件中。然后Python通过读取配置文件方式获取输入。AutoIt将参数写入.ini文件有现成的函数,非常方便。IniWrite()函数原型如下:

IniWrite ( "filename", "section", "key", "value" )

获取外部程序输出结果的2种方式

1、通过StdoutRead()函数获取。这种方式获取输出不稳定,可能是我没掌握到关键点。示例如下:

$op = Run(@ComSpec & " /c " & "D:\temp\dist\process.exe " & '"'&$old_str&'"' & " " & '"'&$new_str&'"' & " " & '"'&$file_path&'"' ,"",@SW_HIDE,$STDOUT_CHILD + $STDERR_CHILD)
$strResult = ""
while 1
  $line = StdoutRead($op)
  if @error Then ExitLoop
  $strResult = $strResult & $line
WEnd
ConsoleWrite($strResult)

2、调用ipconfig命令并将结果输出到文件,AutoIT通过读取文件内容获取。示例如下

$strResult = ""
Local $ipconfig_result_file = @ScriptDir & "\ipconfig_result_file.txt"
ConsoleWrite(@ComSpec & " /c " & "ipconfig > " & '"'&$ipconfig_result_file&'"')
RunWait(@ComSpec & " /c " & "ipconfig > " & '"'&$ipconfig_result_file&'"', "",@SW_HIDE)
$fp = FileOpen($ipconfig_result_file, 0)
if $fp <> -1 Then
 While 1
  $line= FileReadLine($fp)
  If @error = -1 Then ExitLoop
  $strResult = $strResult & $line & @CR
 Wend
EndIf
FileClose($fp)
ConsoleWrite($strResult)

写在最后

本文为界面开发实现有困难的(如本人)同学提供一种可以快速实现界面开发的思路。针对AutoIt语言个人也是现学现用,没有太多的深入研究。另外AutoIt开发工具小巧、安装方便、且AutoIt帮助手册中有所有函数定义和使用的非常详细介绍,有兴趣的同学可以了解一下。上手很容易。最后针对AutoIt+Python实现界面工具开发的总结步骤主要为:

1、利用ScitTe编辑器中的Koda FormDesigner组件拖拽、对齐快速实现界面原型开发。并将界面原型反向生成获取源码。

2、利用Python实现核心业务逻辑处理,通过pyinstaller将.py文件转换成可直接运行.exe文件。

3、利用GUICtrlRead()函数获取用户界面输入,利用Run()函数调用.exe程序并将参数传递进去,实现业务处理。

4、工具开发完成。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
asyncio 的 coroutine对象 与 Future对象使用指南
Sep 11 Python
11月编程语言排行榜 Python逆袭C#上升到第4
Nov 15 Python
Python实现的将文件每一列写入列表功能示例【测试可用】
Mar 19 Python
Sanic框架异常处理与中间件操作实例分析
Jul 16 Python
Python分割指定页数的pdf文件方法
Oct 26 Python
对python中类的继承与方法重写介绍
Jan 20 Python
Python和Go语言的区别总结
Feb 20 Python
Python 把序列转换为元组的函数tuple方法
Jun 27 Python
Python爬虫HTPP请求方法有哪些
Jun 03 Python
Python如何读取、写入JSON数据
Jul 28 Python
pycharm 添加解释器的方法步骤
Aug 31 Python
Python使用BeautifulSoup4修改网页内容
May 20 Python
Django中的用户身份验证示例详解
Aug 07 #Python
浅谈Python中(&amp;,|)和(and,or)之间的区别
Aug 07 #Python
Python操作远程服务器 paramiko模块详细介绍
Aug 07 #Python
使用Python快乐学数学Github万星神器Manim简介
Aug 07 #Python
python中的&amp;&amp;及||的实现示例
Aug 07 #Python
程序员的七夕用30行代码让Python化身表白神器
Aug 07 #Python
python代码实现逻辑回归logistic原理
Aug 07 #Python
You might like
各种咖啡的英文名子是什么
2021/03/03 新手入门
PHP UTF8编码内的繁简转换类
2009/07/20 PHP
服务器web工具 php环境下
2010/12/29 PHP
php数组函数序列之sort() 对数组的元素值进行升序排序
2011/11/02 PHP
php一个找二层目录的小东东
2012/08/02 PHP
简单谈谈favicon
2015/06/10 PHP
PHP环境中Memcache的安装和使用
2015/11/05 PHP
PHP5.2中PDO的简单使用方法
2016/03/25 PHP
PHP的时间戳与具体时间转化的简单实现
2016/06/13 PHP
Thinkphp5行为使用方法汇总
2017/12/21 PHP
PHP调用QQ互联接口实现QQ登录网站功能示例
2019/10/24 PHP
Javascript实例教程(19) 使用HoTMetal(2)
2006/12/23 Javascript
Javascript 阻止javascript事件冒泡,获取控件ID值
2009/06/27 Javascript
javascript学习笔记(二) js一些基本概念
2012/06/18 Javascript
浅析javascript中function 的 length 属性
2014/05/27 Javascript
详解jQuery中的事件
2016/12/14 Javascript
ES6学习笔记之正则表达式和字符串正则方法分析
2017/04/25 Javascript
自适应布局meta标签中viewport、content、width、initial-scale、minimum-scale、maximum-scale总结
2017/08/18 Javascript
Vue 构造选项 - 进阶使用说明
2020/08/14 Javascript
[02:01]大师之路——DOTA2完美大师赛11月论剑上海
2017/11/06 DOTA
[58:25]VP vs RNG 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/17 DOTA
跟老齐学Python之数据类型总结
2014/09/24 Python
简单介绍Python中用于求最小值的min()方法
2015/05/15 Python
Python装饰器基础详解
2016/03/09 Python
python之pandas用法大全
2018/03/13 Python
python文件选择对话框的操作方法
2019/06/27 Python
Python获取二维数组的行列数的2种方法
2020/02/11 Python
python 统计list中各个元素出现的次数的几种方法
2021/02/20 Python
俄罗斯在线手表和珠宝商店:AllTime
2019/09/28 全球购物
Java程序员综合测试题
2014/04/25 面试题
爱情检讨书大全
2014/01/21 职场文书
创先争优活动方案
2014/02/12 职场文书
文科毕业生自荐书范文
2014/04/17 职场文书
2014年后勤工作总结范文
2014/12/16 职场文书
幼师个人总结范文
2015/02/28 职场文书
校园安全学习心得体会
2016/01/18 职场文书