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 相关文章推荐
python操作ie登陆土豆网的方法
May 09 Python
Python数据结构与算法之图的最短路径(Dijkstra算法)完整实例
Dec 12 Python
Python操作Oracle数据库的简单方法和封装类实例
May 07 Python
Numpy中的mask的使用
Jul 21 Python
python3实现zabbix告警推送钉钉的示例
Feb 20 Python
python利用多种方式来统计词频(单词个数)
May 27 Python
python使用pip安装SciPy、SymPy、matplotlib教程
Nov 20 Python
python分布式计算dispy的使用详解
Dec 22 Python
python 使用多线程创建一个Buffer缓存器的实现思路
Jul 02 Python
Python代码覆盖率统计工具coverage.py用法详解
Nov 25 Python
python中操作文件的模块的方法总结
Feb 04 Python
Python访问Redis的详细操作
Jun 26 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
PHP初学者常见问题集合 修正版(21问答)
2010/03/23 PHP
PHP Zip解压 文件在线解压缩的函数代码
2010/05/26 PHP
PHP中判断变量为空的几种方法小结
2013/11/12 PHP
php递归函数中使用return的注意事项
2014/01/17 PHP
php利用cookies实现购物车的方法
2014/12/10 PHP
PHP调试函数和日志记录函数分享
2015/01/31 PHP
PHP实现UTF8二进制及明文字符串的转化功能示例
2017/11/20 PHP
PHP中strtr与str_replace函数运行性能简单测试示例
2019/06/22 PHP
js 链式延迟执行DOME
2012/01/04 Javascript
jquery插件制作简单示例说明
2012/02/03 Javascript
Js控制弹窗实现在任意分辨率下居中显示
2013/08/01 Javascript
javascript控制Div层透明属性由浅变深由深变浅逐渐显示
2013/11/12 Javascript
深入剖析javascript中的exec与match方法
2016/05/18 Javascript
easy ui datagrid 从编辑框中获取值的方法
2017/02/22 Javascript
详解AngularJs HTTP响应拦截器实现登陆、权限校验
2017/04/11 Javascript
利用vscode调试编译后的js代码详解
2018/05/14 Javascript
JavaScript继承定义与用法实践分析
2018/05/28 Javascript
微信小程序云开发使用方法新手初体验
2019/05/16 Javascript
Node对CommonJS的模块规范
2019/11/06 Javascript
Python pandas常用函数详解
2018/02/07 Python
python调用opencv实现猫脸检测功能
2019/01/15 Python
python 将字符串中的数字相加求和的实现
2019/07/18 Python
Python3实现发送邮件和发送短信验证码功能
2020/01/07 Python
Python3中configparser模块读写ini文件并解析配置的用法详解
2020/02/18 Python
pytorch使用horovod多gpu训练的实现
2020/09/09 Python
Python 中Operator模块的使用
2021/01/30 Python
中海讯通笔试题
2015/09/15 面试题
计算机求职信
2013/12/01 职场文书
打架检讨书800字
2014/01/10 职场文书
大学生村官工作感言
2014/01/10 职场文书
买卖车协议书
2014/04/21 职场文书
大学生敬老院活动总结
2015/05/07 职场文书
大学生暑假实习总结
2015/07/13 职场文书
学校运动会通讯稿
2015/07/18 职场文书
聘任书范文大全
2015/09/21 职场文书
CSS实现多个元素在盒子内两端对齐效果
2021/03/30 HTML / CSS