Python+AutoIt實(shí)現(xiàn)界面工具開發(fā)過(guò)程詳解
前言
不同于Linux服務(wù)器上的命令行操作,在windows系統(tǒng)上用戶的使用習(xí)慣還是傾向于使用有界面的工具。如果工具是命令行交互操作的方式,可能是有悖于在windows上使用的操作習(xí)慣,往往不容易推廣使用。
由于需要維護(hù)測(cè)試部工具的原因,其中有一個(gè)工具是用AutoIt語(yǔ)言實(shí)現(xiàn)的,利用幾天時(shí)間把工具源碼學(xué)習(xí)了一下。發(fā)現(xiàn)使用AutoIt可以快速開發(fā)工具界面。當(dāng)然它也能各種邏輯處理,而且也很方便。
但是考慮精力和學(xué)習(xí)成本,我主要使用AutoIt的方式還是利用它來(lái)實(shí)現(xiàn)界面開發(fā)以及學(xué)習(xí)基本的語(yǔ)法完成簡(jiǎn)單的邏輯處理,然后使用Python實(shí)現(xiàn)核心的業(yè)務(wù)處理邏輯。通過(guò)AutoIt調(diào)用函數(shù)執(zhí)行Python編譯后的可執(zhí)行文件方式來(lái)完成工具需求的開發(fā)。
我想,本文最適合的讀者是跟我一樣有界面開發(fā)困難障礙的同學(xué),又不想花太多時(shí)間去學(xué)其他界面實(shí)現(xiàn)開發(fā)的同學(xué)。這種方法有點(diǎn)投機(jī)取巧,不過(guò)是我恰好其他工具使用到了AutoIT,所以結(jié)合了使用??偟膩?lái)說(shuō)還是建議初學(xué)者學(xué)習(xí)使用Python界面工具開發(fā),如PyQt。因?yàn)閷W(xué)習(xí)都是要精力和成本的。本文僅是提供一種思路。
AutoIt簡(jiǎn)述
AutoIt一個(gè)使用類似BASIC腳本語(yǔ)言的免費(fèi)軟件,語(yǔ)言簡(jiǎn)單、開發(fā)工具安裝方便,幫助手冊(cè)內(nèi)容豐富。它設(shè)計(jì)用于Windows GUI(圖形用戶界面)中進(jìn)行自動(dòng)化操作。AutoIt官網(wǎng): https://www.autoitscript.com/site/autoit 。
下面內(nèi)容來(lái)自官網(wǎng)的介紹,如下:
AutoIt工具安裝
Auto工具從官網(wǎng)下載:https://www.autoitscript.com/site/autoit/downloads/。這里要注意的一點(diǎn)是要安裝全量的AutoIt編輯器。把如下兩個(gè)軟件下載,安裝步驟按照提示默認(rèn)操作就可以完成。如果只安裝第1個(gè),就會(huì)缺少本文需要使用的Koda(FormDesigner)菜單欄。
安裝完成后,打開SciTE編輯器。檢查是否包含Koda(FormDesigner)。路徑:菜單欄Tools -> Koda(FormDesigner)。這就是AutoIt界面畫圖的工具,通過(guò)拖拽工具欄中的組件到主界面就可以實(shí)現(xiàn)。
AutoIt界面繪制和對(duì)齊
AutoIt界面實(shí)現(xiàn)就是通過(guò)Koda(FormDesigner)界面中windows控件拖拽的主窗口中實(shí)現(xiàn)。Standard中有常用的windows窗體控件,包括Label、input、Edit、Button、CheckBox、RadioButton、ListBox、ComboBox、Contex Menu
將需要的界面控件拖拽到主界面窗口后,就需要將按照實(shí)際需要對(duì)齊窗口。如下主界面有3個(gè)Lable標(biāo)簽和3個(gè)Input輸入框。
對(duì)齊方法為按住Shift鍵同時(shí)選中需要對(duì)齊操作的按鈕,主要對(duì)齊方式如下):
對(duì)齊方式的描述都有小圖形,挺形象的,應(yīng)該都知道每個(gè)對(duì)齊方式的作用了??梢宰约豪瓗讉€(gè)控件下來(lái),每個(gè)嘗試一下看看效果。最終就能獲取你想要的了。
當(dāng)控件對(duì)齊完成之后??梢詧?zhí)行Tools -> Generate Form Code獲取代碼用于后續(xù)的編輯了。如下
#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獲取界面輸入和調(diào)用外部命令
實(shí)現(xiàn)AutoIt界面,最主要是利用界面讓用戶輸入相關(guān)的參數(shù)。那么程序中如何獲取用戶的輸入?主要是通過(guò)GUICtrlRead()函數(shù),如需要獲取上述界面中用戶輸入的路徑、舊字符串、新字符串。代碼如下:
$file_path = GUICtrlRead($Input1) $old_str = GUICtrlRead($Input2) $new_str = GUICtrlRead($Input3)
獲取到用戶的輸入?yún)?shù)后就可以將參數(shù)傳遞給Python實(shí)現(xiàn)的業(yè)務(wù)邏輯了。AutoIt可以利用Run()函數(shù)調(diào)用外部命令。如Run("notepad.exe", "", @SW_SHOWMAXIMIZED)。在使用Run()調(diào)用之前可以利用Pyinstaller工具將Python業(yè)務(wù)處理邏輯.py文件編譯成可直接運(yùn)行的.exe文件(編譯方法可以參考使用Pyinstaller轉(zhuǎn)換.py文件為.exe可執(zhí)行程序)。這樣就可以直接使用Run()函數(shù)調(diào)用實(shí)現(xiàn)了。
調(diào)用的外部程序獲取參數(shù)的2種常見(jiàn)方式
1、界面輸入?yún)?shù)少(0~3個(gè))。如果界面輸入?yún)?shù)很少,可以直接通過(guò)傳參的方式完,注意觀察下述調(diào)用AutoIt變量的方法。參考代碼如下:
Run(@ComSpec & " /c " & "D:\temp\dist\process.exe " & '"'&$old_str&'"' & " " & '"'&$new_str&'"' & " " & '"'&$file_path&'"' ,"")
2、界面輸入?yún)?shù)多(比如大于3個(gè))
建議可以采用配置文件方式寫入到.ini文件中。然后Python通過(guò)讀取配置文件方式獲取輸入。AutoIt將參數(shù)寫入.ini文件有現(xiàn)成的函數(shù),非常方便。IniWrite()函數(shù)原型如下:
IniWrite ( "filename", "section", "key", "value" )
獲取外部程序輸出結(jié)果的2種方式
1、通過(guò)StdoutRead()函數(shù)獲取。這種方式獲取輸出不穩(wěn)定,可能是我沒(méi)掌握到關(guān)鍵點(diǎn)。示例如下:
$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、調(diào)用ipconfig命令并將結(jié)果輸出到文件,AutoIT通過(guò)讀取文件內(nèi)容獲取。示例如下
$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)
寫在最后
本文為界面開發(fā)實(shí)現(xiàn)有困難的(如本人)同學(xué)提供一種可以快速實(shí)現(xiàn)界面開發(fā)的思路。針對(duì)AutoIt語(yǔ)言個(gè)人也是現(xiàn)學(xué)現(xiàn)用,沒(méi)有太多的深入研究。另外AutoIt開發(fā)工具小巧、安裝方便、且AutoIt幫助手冊(cè)中有所有函數(shù)定義和使用的非常詳細(xì)介紹,有興趣的同學(xué)可以了解一下。上手很容易。最后針對(duì)AutoIt+Python實(shí)現(xiàn)界面工具開發(fā)的總結(jié)步驟主要為:
1、利用ScitTe編輯器中的Koda FormDesigner組件拖拽、對(duì)齊快速實(shí)現(xiàn)界面原型開發(fā)。并將界面原型反向生成獲取源碼。
2、利用Python實(shí)現(xiàn)核心業(yè)務(wù)邏輯處理,通過(guò)pyinstaller將.py文件轉(zhuǎn)換成可直接運(yùn)行.exe文件。
3、利用GUICtrlRead()函數(shù)獲取用戶界面輸入,利用Run()函數(shù)調(diào)用.exe程序并將參數(shù)傳遞進(jìn)去,實(shí)現(xiàn)業(yè)務(wù)處理。
4、工具開發(fā)完成。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
PyTorch快速搭建神經(jīng)網(wǎng)絡(luò)及其保存提取方法詳解
本篇文章主要介紹了PyTorch快速搭建神經(jīng)網(wǎng)絡(luò)及其保存提取方法詳解,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-04-04Python日期時(shí)間處理庫(kù)dateutil詳解
dateutil 為 Python 標(biāo)準(zhǔn)庫(kù) datetime 提供了強(qiáng)大的擴(kuò)展,這篇文章主要介紹了Python日期時(shí)間處理庫(kù)dateutil,需要的朋友可以參考下2022-09-09Python創(chuàng)建對(duì)稱矩陣的方法示例【基于numpy模塊】
這篇文章主要介紹了Python創(chuàng)建對(duì)稱矩陣的方法,結(jié)合實(shí)例形式分析了Python基于numpy模塊實(shí)現(xiàn)矩陣運(yùn)算的相關(guān)操作技巧,需要的朋友可以參考下2017-10-10150行Python代碼實(shí)現(xiàn)帶界面的數(shù)獨(dú)游戲
這篇文章主要介紹了150行Python代碼實(shí)現(xiàn)帶界面的數(shù)獨(dú)游戲,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-04-04Python使用Scrapy保存控制臺(tái)信息到文本解析
這篇文章主要介紹了Python使用Scrapy保存控制臺(tái)信息到文本解析,具有一定借鑒價(jià)值,需要的朋友可以參考下2017-12-12Python中很常用的函數(shù)map()用法實(shí)例
這篇文章主要給大家介紹了關(guān)于Python中很常用的函數(shù)map()用法的相關(guān)資料,map()函數(shù)是Python的內(nèi)置函數(shù),會(huì)根據(jù)提供的函數(shù)參數(shù),對(duì)傳入的序列數(shù)據(jù)進(jìn)行映射,需要的朋友可以參考下2023-10-10