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 提取文件的小程序
Jul 29 Python
python实现向ppt文件里插入新幻灯片页面的方法
Apr 28 Python
Python爬虫抓取手机APP的传输数据
Jan 22 Python
python中pandas.DataFrame的简单操作方法(创建、索引、增添与删除)
Mar 12 Python
详解用Python处理HTML转义字符的5种方式
Dec 27 Python
使用pandas对两个dataframe进行join的实例
Jun 08 Python
Django web框架使用url path name详解
Apr 29 Python
Django 实现xadmin后台菜单改为中文
Nov 15 Python
关于python中plt.hist参数的使用详解
Nov 28 Python
python给指定csv表格中的联系人群发邮件(带附件的邮件)
Dec 31 Python
Python中zipfile压缩文件模块的基本使用教程
Jun 14 Python
Keras - GPU ID 和显存占用设定步骤
Jun 22 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生成EAN_13标准条形码实例
2013/11/13 PHP
thinkphp视图模型查询提示ERR: 1146:Table 'db.pr_order_view' doesn't exist的解决方法
2014/10/30 PHP
css动画效果之animation的常用样式
2021/03/09 HTML / CSS
javascript 一段左右两边随屏滚动的代码
2009/06/18 Javascript
初学js插入节点appendChild insertBefore使用方法
2011/07/04 Javascript
javascrip关于继承的小例子
2013/05/10 Javascript
原生javascript和jquery判断浏览器版本等信息
2013/07/04 Javascript
js表头排序实现方法
2015/01/16 Javascript
jquery控制表单输入框显示默认值的方法
2015/05/22 Javascript
javascript常用函数(1)
2015/11/04 Javascript
Spring MVC中Ajax实现二级联动的简单实例
2016/07/06 Javascript
Javascript中Promise的四种常用方法总结
2017/07/14 Javascript
Web开发使用Angular实现用户密码强度判别的方法
2017/09/27 Javascript
angularJs中$http获取后台数据的实例讲解
2018/08/08 Javascript
详解Vue+axios+Node+express实现文件上传(用户头像上传)
2018/08/10 Javascript
开发中常用的25个JavaScript单行代码(小结)
2019/06/28 Javascript
小程序Request的另类用法详解
2019/08/09 Javascript
layui的layedit富文本赋值方法
2019/09/18 Javascript
jquery实现点击弹出对话框
2020/02/08 jQuery
微信小程序实现canvas分享朋友圈海报
2020/06/21 Javascript
JavaScript动态生成表格的示例
2020/11/02 Javascript
[01:03:09]完美世界DOTA2联赛PWL S2 Forest vs SZ 第二场 11.25
2020/11/26 DOTA
Python正则表达式匹配和提取IP地址
2019/06/06 Python
pytorch载入预训练模型后,实现训练指定层
2020/01/06 Python
django配置app中的静态文件步骤
2020/03/27 Python
简单介绍一下pyinstaller打包以及安全性的实现
2020/06/02 Python
python文件路径操作方法总结
2020/12/21 Python
Linux如何命名文件--使用文件名时应注意
2014/05/29 面试题
公司活动策划方案
2014/01/13 职场文书
校园安全广播稿
2014/02/08 职场文书
生日宴会策划方案
2014/06/03 职场文书
建筑院校毕业生求职信
2014/06/13 职场文书
Redis入门教程详解
2021/08/30 Redis
关于SpringBoot 使用 Redis 分布式锁解决并发问题
2021/11/17 Redis
Win10 和 Win11可以共存吗? win10/11产品生命周期/服务更新介绍
2021/11/21 数码科技
CDPR谈《巫师》新作用虚幻5原因 称不会为Epic独占
2022/04/06 其他游戏