来源:AirPython 作者:星安果 1。前言 大家好,我是安果! 上一篇文章写到可以通过aardio结合Python开发桌面应用,有些小伙伴后台给我留言,说Aardio资料太少,希望我能补充一些实用的功能 本篇文章将聊聊Aardio一些比较实用的进阶用法2。网络请求 在Aardio中,可以使用inet。http来发送网络请求 我们以最简单的GET请求为例 这里添加了一个按钮,然后给这个按钮添加了点击事件,在事件内部发送一个网络请求,最后将请求结果打印出来 importwin。ui; importconsole; importinet。http; 。。。 发起GET请求 mainForm。getbtn。oncommandfunction(id,event){ varhttpinet。http(); 这里将查询参数和URL写在一起 varresult,err,errCodehttp。get(http:ip地址get?usernamexag); http。close(); if(err){ console。log(错误码:,errCode,错误信息:,err); }else{ console。log(result); } console。pause() } mainForm。show(); returnwin。loopMessage(); 如果是处理POST请求,可以采用下面方式: 需要指出的是,创建请求对象http时,可以自定义请求头和请求体参数 importwin。ui; importconsole; importinet。http; 。。。 发起POST请求 mainForm。postbtn。oncommandfunction(id,event){ varhttpinet。http(); 添加请求头 http。addHeaders{ 〔ContentType〕applicationjson } 发起请求 请求体:{a1,b2} varresult,err,errCodehttp。post(http:ip地址books ,{a1,b2}); http。close(); 打印结果 if(err){ console。log(err); }else{ console。log(result); } console。pause() }3。自定义库 通过自定义库,我们可以将一些常用的逻辑进行封装,方便代码分层管理 操作方式如下: 首先,打开项目,在项目根目录下的用户库鼠标右键,选择新建库 输入名称后,文件夹下会自动创建一个自定义的库 然后,在自定义库中编写业务逻辑 PS:为了演示方便,我仅仅编写了一个简单的方法,然后直接返回一个字符串 自定义库文件:customlib。aardio 自定义库 namespacecustomlib{ 自定义一个全局的方法:customfunc customfuncfunction(){ returnxag; } } 需要注意的是,为了方便调用自定义的方法,我将它定义为全局方法,此处没有引用关键字var 最后,我们在窗体源码中导入库名,使用库名。自定义方法()格式调用即可 窗体文件main。aardio 1、导入库名customlib importcustomlib 。。。 直接调用库中定义的方法,并打印结果 console。log(customlib。customfunc()); 。。。。4。简单线程 同样在aardio中,我们可以在线程中执行一些耗时的操作 操作步骤如下: 首先,我们将耗时的操作定义了一个函数,设置到窗体对象的成员属性中去 importfonts。fontAwesome; importwin。ui; importconsole; 。。。 线程执行函数 mainForm。testfuncfunction(){ importconsole 模拟耗时操作 sleep(5000); console。log(testfunc函数执行了) } 。。。 然后使用内置的thread。invoke函数调用上面的函数即可 需要注意的是,thread。invoke函数中,第一个参数为匿名函数,后面是为匿名函数指定的参数 我们将表单对象和其他参数传递给匿名函数,然后在函数内部中使用表单对象调用上面定义的函数 需要 。。。 点击事件 mainForm。calc。oncommandfunction(id,event){ invoke参数分别为:函数、参数1、参数2。。。 thread。invoke( function(mainForm,url){ mainForm。testfunc(); 。。。 设置控件可以点击 mainForm。calc。disabledTextnull; },mainForm,http:www。baidu。com ) } mainForm。show(); 消息循环 returnwin。loopMessage();5。线程中执行Python 上一节我们是直接在主线程中调用Python文件中定义的函数,但是如果针对一些耗时操作的函数就显得体验不好 这里,我在Python文件中定义了一个简单的耗时函数 importtime defexecoperation1(): print(开始1) time。sleep(5) print(结束1) returnsuccess1 下面我们在窗体源码中给一个按钮设置点击事件,调用这个函数 具体步骤如下: 首先,将Python文件放置到res文件夹,然后加载此文件并释放掉GIL锁 importwin。ui; importconsole console。open() importpy3; 。。。 加载python文件 pyCodestring。load(resp。py); 执行pycode py3。exec(pyCode); 释放GIL py3。releaseThread(); 。。。 需要注意的是,这里使用console。open()打开调试器,可以查看线程中的异常 然后,在窗体对象上创建线程函数,使用下面的方式调用Python文件中的函数 创建一个线程函数1,调用Python中一个耗时方法 mainForm。pyThread1function(mainForm) { importpy3; importconsole注意:线程中必须导入console,才能使用console py3。lock( function(){ 调用python文件中的函数 varresulttostring(py3。main。execoperation1()) console。log(result) console。log(type(result)) } ) } 。。。 最后,在按钮的点击事件中,调用上面定义的方法即可 。。。 mainForm。button。oncommandfunction(id,event) { 调用上面定义的方法 thread。invoke(mainForm。pyThread1,mainForm) } 。。。6。最后 很多小伙伴后台给我留言,说aardio资料太少了,其实在aardio编辑器软件中的起始页中提供了一些官方资讯及使用小技巧 编辑器右下角的范例中,列出了桌面端开发常见的开发技巧,另外工具栏中提供了界面处理、编码转换、图标制作、库函数文档等实用工具 还有一些小伙伴提到原生控件丑陋的问题,这个可以使用htmlayout去定制改造,aardio结合htmlayout提供了更高的自由度 另外,在工具栏界面Plus配色工具可以对按钮、输入框、选择框进行美化