1. 前言

大家好,我是安果!

上一篇文章写到可以通过 aardio 结合 Python 开发桌面应用,有些小伙伴后台给我留言,说 Aardio 资料太少,希望我能补充一些实用的功能

实用 | 利用 aardio 配合 Python 快速开发桌面应用

本篇文章将聊聊 Aardio 一些比较实用的进阶用法

2. 网络请求

在 Aardio 中,可以使用「 inet.http 」来发送网络请求

我们以最简单的 GET 请求为例

这里添加了一个按钮,然后给这个按钮添加了点击事件,在事件内部发送一个网络请求,最后将请求结果打印出来

import win.ui;
import console;
import inet.http;
...
//发起GET请求
mainForm.get_btn.oncommand = function(id,event){
var http = inet.http();
//这里将查询参数和URL写在一起
var result,err,errCode = http.get("http://ip地址/get?username=xag");
http.close();
if(err){
console.log("错误码:",errCode,"错误信息:",err);
}else{
console.log(result);
}
console.pause()
} mainForm.show();
return win.loopMessage();

如果是处理 POST 请求,可以采用下面方式:

需要指出的是,创建请求对象 http 时,可以自定义请求头和请求体参数

import win.ui;
import console;
import inet.http;
...
//发起POST请求
mainForm.post_btn.oncommand = function(id,event){
var http = inet.http();
//添加请求头
http.addHeaders = {
["Content-Type"] = 'application/json'
} //发起请求
//请求体:{a=1,b=2}
var result,err,errCode = http.post("http://ip地址/books"
,{a=1,b=2}); http.close(); //打印结果
if(err){
console.log(err);
}else{
console.log(result);
}
console.pause()
}

3. 自定义库

通过自定义库,我们可以将一些常用的逻辑进行封装,方便代码分层管理

操作方式如下:

首先,打开项目,在项目根目录下的「 用户库 」鼠标右键,选择「 新建库 」

输入名称后,文件夹下会自动创建一个自定义的库

然后,在自定义库中编写业务逻辑

PS:为了演示方便,我仅仅编写了一个简单的方法,然后直接返回一个字符串

// 自定义库文件:customlib.aardio

//自定义库
namespace customlib{
//自定义一个全局的方法:custom_func
custom_func = function(){
return "xag";
}
}

需要注意的是,为了方便调用自定义的方法,我将它定义为全局方法,此处没有引用关键字 var

最后,我们在窗体源码中导入库名,使用「 库名.自定义方法()」格式调用即可

//窗体文件main.aardio
//1、导入库名customlib
import customlib ...
//直接调用库中定义的方法,并打印结果
console.log(customlib.custom_func());
....

4. 简单线程

同样在 aardio 中,我们可以在线程中执行一些耗时的操作

操作步骤如下:

首先,我们将耗时的操作定义了一个函数,设置到窗体对象的成员属性中去

import fonts.fontAwesome;
import win.ui;
import console;
...
//线程执行函数
mainForm.test_func=function(){
import console
//模拟耗时操作
sleep(5000);
console.log("test_func函数执行了")
}
...

然后使用内置的「 thread.invoke 」函数调用上面的函数即可

需要注意的是,thread.invoke 函数中,第一个参数为匿名函数,后面是为匿名函数指定的参数

我们将表单对象和其他参数传递给匿名函数,然后在函数内部中使用表单对象调用上面定义的函数

需要

...
//点击事件
mainForm.calc.oncommand = function(id,event){ //invoke参数分别为:函数、参数1、参数2...
thread.invoke(
function(mainForm,url){
mainForm.test_func();
...
//设置控件可以点击
mainForm.calc.disabledText = null;
},mainForm,"http://www.baidu.com"
)
} mainForm.show();
//消息循环
return win.loopMessage();

5. 线程中执行 Python

上一节我们是直接在主线程中调用 Python 文件中定义的函数,但是如果针对一些耗时操作的函数就显得体验不好

这里,我在 Python 文件中定义了一个简单的耗时函数

import time

def exec_operation1():
print("开始1")
time.sleep(5)
print("结束1")
return "success1"

下面我们在窗体源码中给一个按钮设置点击事件,调用这个函数

具体步骤如下:

首先,将 Python 文件放置到 res 文件夹,然后加载此文件并释放掉 GIL 锁

import win.ui;
import console
console.open()
import py3;
...
//加载python文件
pyCode = string.load("\res\tp.py");
//执行pycode
py3.exec(pyCode);
//释放GIL
py3.releaseThread();
...

需要注意的是,这里使用 「 console.open() 」打开调试器,可以查看线程中的异常

然后,在窗体对象上创建线程函数,使用下面的方式调用 Python 文件中的函数

//创建一个线程函数1,调用Python中一个耗时方法
mainForm.pyThread1 = function(mainForm)
{
import py3;
import console //注意:线程中必须导入console,才能使用console
py3.lock(
function(){
//调用python文件中的函数
var result = tostring(py3.main.exec_operation1())
console.log(result)
console.log(type(result))
}
)
}
...

最后,在按钮的点击事件中,调用上面定义的方法即可

...
mainForm.button.oncommand = function(id,event)
{
//调用上面定义的方法
thread.invoke(mainForm.pyThread1,mainForm)
}
...

6. 最后

很多小伙伴后台给我留言,说 aardio 资料太少了,其实在 aardio 编辑器软件中的「 起始页 」中提供了一些官方资讯及使用小技巧

编辑器右下角的「 范例 」中,列出了桌面端开发常见的开发技巧,另外工具栏中提供了界面处理、编码转换、图标制作、库函数文档等实用工具

还有一些小伙伴提到原生控件丑陋的问题,这个可以使用 htmlayout 去定制改造,aardio 结合 htmlayout 提供了更高的自由度

另外,在工具栏 - 界面 - Plus 配色工具可以对按钮、输入框、选择框进行美化

最后,列出一些优秀的学习网站供大家参考学习和提升

https://www.aardio.net/

https://bbs.aardio.com/

https://www.htmlayout.cn/

https://github.com/search?q=aardio+NOT+his+sort%3Aupdated

如果你觉得文章还不错,请大家 点赞、分享、留言 下,因为这将是我持续输出更多优质文章的最强动力!

推荐阅读

Postman 如何调试加密接口?

5 分钟,使用内网穿透快速实现远程桌面

聊聊 Jmeter 如何并发执行 Python 脚本

聊聊 PC 端自动化最佳方案 - Pywinauto

聊聊 PC 端自动化最佳方案 - WinAppDriver

实用 | 利用 aardio 配合 Python 快速开发桌面应用

aardio 开发桌面应用,这几点必须要掌握!的更多相关文章

  1. 实用 | 利用 aardio 配合 Python 快速开发桌面应用

    1. 前言 大家好,我是安果! 我们都知道 Python 可以用来开发桌面应用,一旦功能开发完成,最后打包的可执行文件体积大,并且使用 Python 开发桌面应用周期相对较长 假如想快速开发一款 PC ...

  2. aardio + Python 可视化快速开发桌面程序,一键生成独立 EXE

    网络上大家分享的 aardio + Python 混合开发的文章很多,不得不说 aardio 与 Python 混合开发是真的简单 !  快速入门 推荐几个快速上手教程:< aardio + P ...

  3. arcpy+PyQt+py2exe快速开发桌面端ArcGIS应用程序

    前段时间有一个项目,大体是要做一个GIS数据处理工具. 一般的方法是基于ArcObjects来进行开发,因为我对ArcObjects不太熟悉,所以就思考有没有其他简单快速的方法来做. 在查看ArcGI ...

  4. 使用nwjs开发桌面应用之Hello,World!

    今天发现原来JavaScript也可以用来开发桌面应用程序,顿时有一种很牛逼的感觉,于是马上就开始了Hello,World!,感受一下JavaScript的强大. 可以用来开发桌面应用的js框架有三种 ...

  5. electron之Windows下使用 html js css 开发桌面应用程序

    1.atom/electron github: https://github.com/atom/electron 中文文档: https://github.com/atom/electron/tree ...

  6. NativeScript 也能开发桌面应用 (nativescript-dotnet-runtime)

    自从看了NativeScript就甚是喜欢,心想要是也能开发桌面应用该多好.求人不如求己,开源组件很强大,差不多组装一下就行了,说干就干. Javascript 引擎用 Jint , 纯C#实现,集成 ...

  7. heX——基于 HTML5 和 Node.JS 开发桌面应用

    heX 是网易有道团队的一个开源项目,允许你采用前端技术(HTML,CSS,JavaScript)开发桌面应用软件的跨平台解决方案.heX 是你开发桌面应用的一种新的选择,意在解决传统桌面应用开发中繁 ...

  8. heX:用HTML5和Node.JS开发桌面应用

    国内私募机构九鼎控股打造APP,来就送 20元现金领取地址:http://jdb.jiudingcapital.com/phone.html内部邀请码:C8E245J (不写邀请码,没有现金送)国内私 ...

  9. node-webkit:开发桌面+WEB混合型应用的神器

    顾名思义, node -webkit就是 node js+webkit. 这样做的好处显而易见,核心奥义在于,用 node js来进行本地化调用,用webkit来解析和执行HTML+JS. 快速上手 ...

随机推荐

  1. javascript 分时函数 分批次添加DOM节点 timeChunk

    创建1000个webqq的qq好友列表, 一个好友用一个节点来表示 * timeChunk var timeChunk = function(a, fn, sz, done) { var obj, t ...

  2. WireShark基础用法

    特点 免费 开源 跨平台 抓包原理 内部原理 抓取网卡 抓包环境 抓取本地数据 抓取外部数据 利用hub 流量镜像span.rspan.erspan 界面介绍.首选项.抓包选项 界面介绍 菜单栏 帮助 ...

  3. Appium driver常用API

    click driver.find_element implicitly_wait send_keys close quit get_window_size switch_to execute bac ...

  4. python多线程与_thread模块

    进程与线程 1.进程:计算机程序只是存储在磁盘中的可执行二进制(或其他类型)的文件.只有把他们加载到内存中并被操作系统调用,才具有其生命周期.进程则是一个执行中的程序.每个进程都拥有自己的地址空间,内 ...

  5. C#实例:datagridview单元格合并

    这是替C#微信交流群群友做的一个小实例,目的就是在datagridview选择对应行以后,点击button后获取对应行的ip,并执行相应的操作,其实我觉得这样的话button没必要非放置到datagr ...

  6. Ueditor Version 1.4.3.3 SSRF

    点以前挖的洞.Ueditor是支持获取远程图片,较为经典的进行限制url请求,但是可以通过DNS重绑定绕过其验证. 代码分析 一般请求的url如下,其中source为数组,值为图片地址: /edito ...

  7. MyCat的快速搭建

    1. 概述 老话说的好:一个好汉三个帮,一个人再聪明.再有本事,也要借助他人的力量,才能成功. 言归正传,今天我们来聊聊 MyCat的快速搭建. 2. 场景介绍 服务器A IP:192.168.1.2 ...

  8. windows下编译caffe出现错误 C4996: 'std::_Copy_impl': Function call with parameters that may be unsafe?

    解决方案来自http://blog.csdn.net/u012556077/article/details/50353818

  9. 深入思考软件工程,开启 DevOps 之旅

    20 世纪 60 年代,软件开始脱离硬件,逐渐成为一个独立产业.至今,软件开发过程从瀑布模型.CMM/CMMI,到 20 年前敏捷的诞生,再到今天 DevOps 的火热,一代代软件人在思考和探索,如何 ...

  10. 题解 UVA1500 Alice and Bob

    题目传送门 题目大意 给出 \(n\) 堆石子,每次可以做以下两种操作之一: 将某两堆石子进行合并 将某一堆石子抽走一个石子 问谁必胜. 思路 就nm很妙好么? 首先,我们需要考虑每堆石子大小都 \( ...