这个时候就会想到,delphi 其实还活着,真native编译,体积小,运行快,语言比c++方便,商业库一大堆,后面还有个免费开源版delphi的lazarus,虽然这个坑现在不推荐入,但是用这套的老开发者照样用的很爽。
c++ duilib 也是比较轻巧快速的方案,开发小工具够用了
易语言相当于一个还在更新的中文化的vb6,我觉得比用vb6好
夸aardio的人貌似说的话都差不多,没用过,看起来开发小工具还行
至于qt electron,就不是适合小工具的了吧,qt对于熟悉的人来说静态编译一下或许还行,体积不算太大性能也够,electron么。。。哪个用它的不是60M起步,启动要延迟一会儿的。。。垃圾电脑的克星,wpf都能秒启动的机子,vscode启动要8秒你们感受下
wpf,winform用一些dll合并混淆工具也能好好做成一个单文件,依赖系统.net体积不会太大,就是靠谱的工具不好找,至于.net core搞的单文件无依赖么,就是个大体积自解压,我觉得没啥意思,也许nativeaot支持winform或者wpf后能适合单文件小工具编写
个人不在乎单文件,都是.net 4.6 wpf开发工具,不合并dll,复用dll,把工具放在一个文件夹内变成一个工具集文件夹,dll共用的
大家好,我正在开发一款python的桌面软件设计IDE,就是为了能够方便的进行Python界面设计,解决Python进行桌面应用开发的痛点问题,您可以到http://www.tkinterdesigner.com尝试一下。
python本身的tkinter库,提供了一系列控件支持,但是很可惜,竟然没有官方的界面设计器。
我希望能有这样的IDE,提供类似VC++那样“所见即所得”的模式进行快速UI搭建,同时把界面设计与逻辑分离,并有一套成熟的应用软件项目开发流程进行支持。
目前这个作品已经能够支持:
1.项目管理:方便的创建,查看,管理项目工程
2.界面设计:通过拖拽操作进行界面设计,并通过属性列表修改其熟悉。也可以方便的进行窗体的嵌入设置。
3.事件与函数映射:通过对控件进行事件选择与函数进行绑定,实现逻辑。
4.代码库:提供对控件及其属性的快速访问,也提供常用功能(如文件框,文件夹遍历文件,创建线程)等。
5.样式表编辑;可以创建和管理样式,并实现控件样式应用和整体换风格。
6.调试,运行与打包:一键运行与导出EXE。
其他:还在加强插件市场,皮肤市场,外包市场的功能扩展,我希望将它发展成一个python应用开发的平台。
可以感受一下最新V1.5.1
最新V1.5.1版从入门到精通
github地址下载:https://github.com/honghaier-game/TKinterDesigner
在我看来,判断一个东西是否有价值的标准,并不是它有多么赚钱,而是他是否能帮到别人赚钱。
现在已经1.6.3版本了,目前正在紧张开发直接打包导出apk,尽早解决移动开发问题。
2022-02-26:
1.6.4版本发布,已经可以打包APK了!
欢迎体验
https://www.zhihu.com/video/1455197732536881152
GITHUB地址下载:https://github.com/honghaier-game/TKinterDesigner
百度网盘下载:
win64版本:支持打包ANDROID!
链接:https://pan.baidu.com/s/1ipaijDskmhEY8-rrdkiIuQ
提取码:6mth
win32版本:
链接:https://pan.baidu.com/s/1TaGUbzN2AxsWFSLQKuYxCA
提取码:s1lpWIN版SDK:
JDK:链接:https://pan.baidu.com/s/1lp8C_2meLpW2pqDjmilY9g
提取码:xfgp
ANDROID-SDK:链接:链接:https://pan.baidu.com/s/1zySbcphoPqj7zUgmXBIXbg
提取码:m08v
NDK:链接:https://pan.baidu.com/s/1u8MuZlQNq_VM8wKC5kqeOw
提取码:vby3
MAC版:链接:https://pan.baidu.com/s/1YZPPy5dxeHOJjVcvM-YVKQ
提取码:r94v
MAC版SDK:
ANDROID-SDK:链接:https://pan.baidu.com/s/11-fk7LGwLRLRVV5-FtlCvw 提取码:o6mu
NDK:链接:https://pan.baidu.com/s/1xWZFwLPUH7crjTkwA9GsYg
提取码:akbi
JDK:链接:https://pan.baidu.com/s/1kr7vg24AfaOaOBgVj7ApJw
提取码:u97z
说 Qt 静态编译难,打包难的,2022 年了,要个静态连接的 Qt 只需要 msys2 里一句话:
pacman -S mingw32/mingw-w64-i686-qt5-static
担心污染 msys2 环境,可以用 msys2 重新做一个干净的 mingw32 环境:
mount D:/Qt/mingw32 /mingw32 pacman -Qnq | grep mingw-w64 | pacman -R -
上面把 /mingw32 目录临时 mount 到 D:/Qt/mingw32
目录,并删除旧信息,接下来:
pacman -S mingw32/mingw-w64-i686-gcc pacman -S mingw32/mingw-w64-i686-gdb pacman -S mingw32/mingw-w64-i686-make pacman -S mingw32/mingw-w64-i686-cmake pacman -S mingw32/mingw-w64-i686-qt5-static
记得把 msys2 的源设置成中科大,略微等待,妥了,一个干净的 qt-static + mingw 环境完成了,退出 msys2,然后原有 QtCreator 里面设置工具链:
接着写个小 demo,用上面的 qt5-static 生成:
直接文件夹里双击运行:
可以看到无依赖正常运行,使用 MinGW 静态连接,嫌弃 20MB 有点大?没关系 upx 一压缩:
立马瘦身到 7MB,连一堆 msvcrt 的 VC 运行时都不需要依赖。主要是各类静态库,再写复杂点,其实也不会增加多少,你就是写的有 Qt designer 那么复杂,静态连接也才 29MB :
压缩一下,静态版本 designer 里面就只有 11 MB 了:
这么复杂的界面程序 11MB 已经非常不错了,双击运行:
验证通过,成功运行,MinGW 静态连接的,连 msvcrt 的依赖都不需要。
2021年开发 单 EXE 桌面软件可以试试 aardio 。
aardio 语法接近 Javascript ,不需要过多的学习成本,历经 17年 活跃更新已经成熟且稳定。
而且 aardio 非常小,开发环境仅 6.5 MB(包含开源的标准库、范例文档、开发环境),下载就可以使用,不需要任何复杂的配置。
aardio 生成独立 EXE 文件特别方便。例如只要将文件路径前加上 $ 号就可以将文件编译到程序中,可以一键将工程目录编译为 EXE 嵌入资源目录,不需要修改代码,aardio 中的很多函数和库都支持这种嵌入资源目录。
在 aardio 中可以非常方便地调用 C语言、C++、C#、Java、Python、R、Javascript、Node.Js、VB、Flash ActionScript、PHP、VBScript、PowerShell、NewLISP、AutoLISP、Delphi、FreeBASIC、Ruby、Rust、Julia、Nim、Go 语言、批处理 ...... 甚至可以直接嵌入汇编机器码并且转换为普通的 aardio 函数。aardio 可直接调用、嵌入、交互的第三方编程语言数量非常多,而且非常方便,大家可以 Google 一下 aardio + Python 就可以看到 aardio 这种模式吸引了不少其他编程语言的用户。
曾经有知名博主针对某个 aardio 编写的开源软件 —— 与一系列其他语言编写的同类软件试用评测对比后得出的总结是:aardio 编写的软件运行最流畅,使用体验吊打同类软件,并且非常稳定从未遇到报错,而这个 aardio 软件只用了非常少的代码 —— 体积不到同类软件的十分之一,而其他用各种桌面开发工具开发的同类软件,不但界面不顺畅,各种恼人的 BUG 也非常多。所以 aardio 编写的桌面软件拥有良好的可靠性。
我们先看一些 aardio 编写的开源软件:
最近很受欢迎的开源录屏软件 Gif123 就是用 aardio 写的,体积仅 790 KB,无任休何外部依赖,单文件绿色软件,兼容 XP,Vista,Win7,Win8,Win10,Win11 …… 等所有流行桌面操作系统 。
开源项目 WubiLex,仅积仅 890KB,同样是单文件绿色软件。百度贴吧一个关于 WubiLex 的讨论帖子已经超过 1200 回复,WIN10系统自带五笔的码表与短语词库安装、管理工具,并可增强微软五笔的设置、热键等功能。只要一个EXE文件,不需要安装,不需要任何DLL依赖。软件已自带五笔86、98、091、新世纪码表,以及极点五笔、QQ五笔、微软五笔默认词库、昱琼词库、海峰词库等。甚至自带了郑码词库、可以一键把微软五笔替换为郑码输入法。
开源项目 WinAsar,体积仅 500KB,单文件,不需要运行时,支持所有 Windows 操作系统,Electron asar 文件打包、解包工具,不需要安装 Node.js,纯 aardio 代码实现的 asar 解析器。
下面这个是 8 年前的开源项目,作者仅临时学了个把月 aardio :
aardio 里可以方便地嵌入非常多的浏览器组件,仅工程向导里的范例就有这么多(实际更多)
aardio 还可以调用系统自带的 Chrome 浏览器写软件界面,兼容 Chrome 启动参数的浏览器都可以支持( 例如 Windows 自带的浏览器 Edge Chromium),而且还支持 Javascript 与 aardio 互调函数,非常地方便,因为使用系统自带的浏览器,生成的 EXE 体积也非常小。
aardio 里嵌入浏览器不仅仅是简单地嵌入个网页,而是在网页里可以方便的调用本地函数,aardio 仅仅用几句代码就可以实现一个嵌入式的 http 服务器,将任何只能在服务器上展示的网页一键嵌入 EXE文件。
以微软最新发布的 WebView2 控件为例,在 aardio 里可以调用 Javascript 函数,在Javascript 里也可以方便的调用 aardio 函数,而且还可以把 aardio 对象直接传入到 Javascript 中使用。而且还可以非常方便的创建桌面透明窗口,以下是调用 WebView2 组件实现的透明 3D 效果:
调用 Cesium 组件实现的三维地图:
aardio 编写程序代码非常简洁,几句代码就是一个独立可运行的程序,下面我们直接上代码演示一。
一个示例可以看到 aardio 窗口嵌入 .Net 控件有多简单:
import win.ui; var winform = win.form(text="DataGridView") import System.Data; var tab = System.Data.DataTable("DT"); tab.Columns.Add("名称"); tab.Rows.Add({"WangWu"}); import System.Windows.Forms; var grid = System.Windows.Forms.CreateEmbed("DataGridView",winform); grid.ColumnHeadersHeightSizeMode = 2; grid.DataSource = System.Data.DataView(tab); winform.show(); win.loopMessage();
你可能无法想象,aardio 作为一个非 .Net 平台的语言,可以像 C# 一样自由调用 .Net 对象。甚至可以在 aardio 中直接引入 .Net 的名字空间作为 aardio 名字空间使用。一个重要的特性是 aardio 可以内存加载 .Net 的程序集,并且不再强依赖生成该程序集的 .Net 版本,可以非常方便地生成小巧的绿色 EXE 文件 —— 同时让 .Net 反编译工具失效。
下面演示一下用 aardio 调用 PowerShell,并且在 PowerShell 中调用 aardio。这甚至都不用带上体积较大的 System.Management.Automation.dll,一个轻巧的 EXE 就可以搞定一切,向下兼容到 PowerShell 2.0。
import dotNet.ps; var pScript = /* # 声明 PowerShell 参数 param($win) # 修改 aardio 对象属性 $win.title = "PowerShell + aardio"; # 调用 aardio 对象函数 $win.msgbox("这是 PowerShell 调用 aardio 打开的对话框。") */ import win; dotNet.ps(pScript,{ win = win; //# 将 aardio 对象作为参数传给 PowerShell });
aardio 直接调用系统 API 函数:
import console; //不需要声明,直接调用原生 API 函数,语法简洁可读性好。 var result = ::User32.PtInRect( ::RECT(2,3,300,500) , 12, 66 ); console.log( result ); console.pause(true);
将任何网络 API 甚至是任意普通网址声明为 aardio 对象:
import web.rest.jsonLiteClient; var http = web.rest.jsonLiteClient(); //导入远程 API var countApi = http.api("https://api.countapi.xyz/hit{/domain}{/key}") //服务器 API 已经变成了 aardio 函数对象 var data = countApi["key"].get();
编译 C 语言代码生成 DLL 执行文件,再调用 DLL 中的 C 函数:
import tcc; //编译 DLL tcc.build( "/start.dll" ).code = /*** #include <windows.h> __declspec(dllexport) int Add( int a,int b ) { return a + b; } ***/ //加载 DLL var dll = raw.loadDll( "/start.dll",,"cdecl" ); //调用 C函数 var result = dll.Add(12,3);
屏幕找字:
import mouse; import string.ocrLite; import string.ocrLite.defaultModels; var ocr = string.ocrLite(); var ocrResult = ocr.detectScreen(); var x,y = ocrResult.findPoint("要查找的按钮文本",0.1); mouse.moveTo(x,y,true);
在 aardio 中调用 Python,简单得就像在 Python 中使用 Python:
import console; import py3; //导入 Python 模块。 var itertools = py3.import("itertools") //调用 Python 函数,支持纯 aardio 类型参数 var permutations = itertools.permutations({"a","b","c"}); //调用 Python 内置函数 list var pyList = py3.list(permutations); //遍历 Python 对象成员 for( item in pyList.each() ){ console.log(item); //像 aardio 对象一样使用 Python 对象 } console.pause();
播放 GIF 动画:
import win.ui; /*DSG{{*/ var winform = win.form(text="GIF 动画";bgcolor=0xEDDDD8) winform.add( plus={cls="plus";left=0;top=0;right=760;bottom=470;repeat="scale";z=1} ) /*}}*/ import inet.http; winform.plus.background = "http://download.aardio.com/v10.files/demo/plus-demo.gif"; winform.show(); win.loopMessage();
调用微软 WebView2 控件截图:
import win.ui; /*DSG{{*/ var winform = win.form(text="WebView2 网页截图";right=1108;bottom=759) /*}}*/ import web.view; var wb = web.view(winform,,0/*自动调试端口*/); winform.show(); wb.go("http://www.baidu.com"); wb.wait("baidu"); import web.socket.chrome; var ws = wb.openRemoteDebugging(); ws.Runtime.enable();//启用 Runtime.executionContextCreated //截图 import crypt; import process.imageView; ws.Page.captureScreenshot().end = function(result,err){ if(result[["data"]]){ string.save("/screenshot.png",crypt.decodeBin(result[["data"]]) ) process.imageView("/screenshot.png"); } } win.loopMessage();
获取系统 TPM 版本信息:
import console; import sys.tpmInfo; var tpmInfo = sys.tpmInfo.get(); if(tpmInfo){ console.log("支持 TPM"); console.log("TPM 是否启用:",tpmInfo.enabled); console.log("TPM 是否激活:",tpmInfo.activated); console.log("TPM 支持版本:",tpmInfo.version) } else { console.log("不支持 TPM"); } console.pause();
查看系统安装序列号:
import com.wmi; import win.reg; var productKey = com.wmi.get("softwarelicensingservice","OA3xOriginalProductKey"); if(!productKey) { productKey = win.reg.queryWow64( "HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindows NTCurrentVersionSoftwareProtectionPlatform","BackupProductKeyDefault" ) } import console; console.log("安装序列号" ,productKey); console.pause(true);
调用 .Net 创建 WebService:
import console; import dotNet; //创建应用程序域(无参数创建唯一实例,不必手动释放) var appDomain = dotNet.appDomain(); //动态创建Web服务 var webService = appDomain.createWebService("http://fy.webxml.com.cn/webservices/EnglishChinese.asmx") //调用WebService接口创建类 var englishChinese = webService.createInstance("EnglishChinese") //调用WebService提供的函数 var ret = englishChinese.TranslatorString("hello" ); console.dump(ret); console.pause();
其实不用调用 .Net ,纯 aardio 代码调用 WebService 更简单,。
以前研究过 MSSOAP ,要依赖一堆 DLL 文件,这不符合 aardio 的风格。所以我自己研究了一下 SOAP 协议写了个 web.soapClient , 几句代码搞定,不依赖任何外部组件:
import console; //导入MSSOAP支持库 import web.soapClient; //创建SOAP客户端 seviceClient = web.soapClient("http://fy.webxml.com.cn/webservices/EnglishChinese.asmx") //调用远程Web服务提供的函数 var transArray,err = seviceClient.TranslatorString("hello"); //显示返回值 console.dump( string.join( transArray,'
' ) ) ; //按任意键继续 console.pause();
在 aardio 中嵌入并调用批处理:
import console import process.batch; //批处理 for 遍历并拆分字符串 var bat = process.batch(` @echo off for %%i in (abc,def,xyz) do echo %%i `) console.log(bat.read(-1)) console.pause()
调用命令行,并自动触发 Ctrl + C
import console import process.popen var prcs = process.popen("ping 127.0.0.1 -n 10 ") for( all,out,err in prcs.each() ){ console.log( out,err ); prcs.ctrlEvent(0); } console.pause();
调用 Rust 语言解析 TOML
import console; import string.toml; var str = string.toml.stringify({abc=123,d={1,2,3}}); console.log( str ); import process.code; process.code("~libstring oml.res"); console.pause(true);
在 aardio 里嵌入 PHP,以下短短几句代码,包含了 HTTP 服务器,PHP服务端,嵌入的浏览器组件:
import win.ui; /*DSG{{*/ var winform = win.form(text="Hello World / PHP_CGI 服务器") /*}}*/ var code = /* <html> <head> <meta charset="utf-8"> <title>PHP 测试</title> </head> <body> <?php echo '<p>Hello World / PHP_CGI 服务器</p>'; ?> </body> </html> */ string.save("/test.php",code); import php.simpleHttpServer; var url = php.simpleHttpServer.startUrl("/test.php"); import web.form; var wb = web.form(winform); wb.go(url); winform.show(); win.loopMessage();
执行 Ruby 语言代码:
import win.ui; /*DSG{{*/ var winform = win.form(text="执行Ruby代码") winform.add( edit={cls="edit";left=26;top=16;right=737;bottom=435;multiline=1;z=1} ) /*}}*/ import process.ruby; var out = process.ruby.exec("puts '测试UTF-8'") winform.edit.print(out); var out = process.ruby.eval(`[1, 2, { name: "tanaka", age: 19 }]`) winform.edit.print(out); winform.show(); win.loopMessage();
QT
这个问题其实,主要取决于你的团队,以及商业模式。
我假定你一个便携小工具是没打算赚大钱的,只是顺带附送的工具,从这个角度出发的话,「不可能专门为了这个项目去培训或者招聘」。
那么结果就很显然了:你的团队成员会什么技术,那就用什么技术。什么方法能立即上手就用它。——其它的因素都是次要的。因为理论上,现在任何技术,都可以用来写桌面应用。所以技术本身不是痛点,痛点是你的团队成员懂什么,最喜欢用什么,那就赶快用上。
我很难相信为了一个便携小工具你们会专门让团队学习培训新技术或者专门招一个懂新技术的人来带队。如果是这样的话,那参考其它回答。
本站所有内容均为互联网搜索引擎提供的公开搜索信息,本站不存储任何数据与内容,任何内容与数据均与本站无关,如有需要请联系相关搜索引擎包括但不限于百度,google,bing,sogou 等
© 2025 tinynews.org All Rights Reserved. 百科问答小站 版权所有