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 相关文章推荐
分享15个最受欢迎的Python开源框架
Jul 13 Python
跟老齐学Python之有点简约的元组
Sep 24 Python
python并发编程之线程实例解析
Dec 27 Python
Python实现的寻找前5个默尼森数算法示例
Mar 25 Python
详谈在flask中使用jsonify和json.dumps的区别
Mar 26 Python
python 读入多行数据的实例
Apr 19 Python
pycharm打开命令行或Terminal的方法
Jan 16 Python
django ModelForm修改显示缩略图 imagefield类型的实例
Jul 28 Python
python并发爬虫实用工具tomorrow实用解析
Sep 25 Python
python3.8下载及安装步骤详解
Jan 15 Python
python中upper是做什么用的
Jul 20 Python
Python进程间的通信之语法学习
Apr 11 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
德生BCL3000的电路分析和打磨
2021/03/02 无线电
Discuz 模板引擎的封装类代码
2008/07/18 PHP
使用php从身份证号中获取一系列线索(星座、生肖、生日等)
2016/05/11 PHP
PHP实现二维数组去重功能示例
2017/01/12 PHP
找到一点可怜的关于dojo资料,谢谢作者!
2006/12/06 Javascript
DIY jquery plugin - tabs标签切换实现代码
2010/12/11 Javascript
ASP.NET jQuery 实例18 通过使用jQuery validation插件校验DropDownList
2012/02/03 Javascript
Knockout text绑定DOM的使用方法
2013/11/15 Javascript
Node.js模块加载详解
2014/08/16 Javascript
一个不错的仿携程自定义数据下拉选择select
2014/09/01 Javascript
javascript组合使用构造函数模式和原型模式实例
2015/06/04 Javascript
js日期插件dateHelp获取本月、三个月、今年的日期
2016/03/07 Javascript
全面解析JavaScript的Backbone.js框架中的Router路由
2016/05/05 Javascript
jQuery动态追加页面数据以及事件委托详解
2017/05/06 jQuery
360doc网站不登录就无法复制内容的解决方法
2018/01/27 Javascript
浅谈js获取ModelAndView值的问题
2018/03/28 Javascript
JS获取子节点、父节点和兄弟节点的方法实例总结
2018/07/06 Javascript
Layui给数据表格动态添加一行并跳转到添加行所在页的方法
2018/08/20 Javascript
JS字符串常用操作方法实例小结
2019/06/24 Javascript
layer.open回调获取弹出层参数的实现方法
2019/09/10 Javascript
基于jquery ajax的多文件上传进度条过程解析
2019/09/11 jQuery
vue简单练习 桌面时钟的实现代码实例
2019/09/19 Javascript
打印出python 当前全局变量和入口参数的所有属性
2009/07/01 Python
python字符串对其居中显示的方法
2015/07/11 Python
Python动态参数/命名空间/函数嵌套/global和nonlocal
2019/05/29 Python
Django 简单实现分页与搜索功能的示例代码
2019/11/07 Python
python绘制BA无标度网络示例代码
2019/11/21 Python
Tensorflow: 从checkpoint文件中读取tensor方式
2020/02/10 Python
Python日志:自定义输出字段 json格式输出方式
2020/04/27 Python
Python判断字符串是否为合法标示符操作
2020/09/03 Python
Python使用pycharm导入pymysql教程
2020/09/16 Python
appium+python自动化配置(adk、jdk、node.js)
2020/11/17 Python
设置器与访问器的定义以及各自特点
2016/01/08 面试题
3.15国际消费者权益日主题活动活动总结
2014/03/16 职场文书
小平您好观后感
2015/06/09 职场文书
python中 .npy文件的读写操作实例
2022/04/14 Python