找回密码
 加入
搜索
楼主: 繁星

[皮肤] AUI界面库

[复制链接]
 楼主| 发表于 前天 12:53 | 显示全部楼层
3131210 发表于 2026-6-15 07:52
创建tab的时候,在gui里面怎么编辑每个tab下面的控件?出个例子吧

顶部导航
#AutoIt3Wrapper_UseX64=n
#include "AUI.au3"

; ─── AUI 控件示例:Tabs导航标签页切换 ───  演示:点击顶部 Tabs 标签,下方内容区切换到对应界面(首页 / 数据 / 设置 / 关于)
Global $g_hWin = _UI_WindowCreate("AUI 示例 — Tabs顶部标签页切换", 900, 580)
Global $g_aPages[4]                       ; 4 个内容面板的 id(回调里切换)

; 根容器是纵向 Column:标题 → Tabs(在上)→ 内容区(在下)依次堆叠
Global $idRoot = _UI_Column($g_hWin, 0)
_UI_SetPadding($g_hWin, $idRoot, 24)
_UI_SetGap($g_hWin, $idRoot, 14)
_UI_Heading($g_hWin, $idRoot, "顶部标签页切换", 1, 0, 0, 0, 44)

; Tabs 全宽放在内容上方
Global $idTabs = _UI_Tabs($g_hWin, $idRoot, "首  页|数  据|设  置|关  于", 100, 0, 0, 0, 40)
_UI_OnValue($g_hWin, $idTabs, "OnNav")

; 内容区在 Tabs 下方,用 flex_grow 填满剩余高度;4 个面板叠在这里
Global $idContent = _UI_Column($g_hWin, $idRoot, 0, 0, 0, 0)
_UI_SetFlexGrow($g_hWin, $idContent, 1)

; 页 0:首页 / 概览
Global $page0 = _UI_Column($g_hWin, $idContent, 0, 0, 0, 0)
_UI_SetFlexGrow($g_hWin, $page0, 1)
_UI_SetGap($g_hWin, $page0, 12)
_UI_Heading($g_hWin, $page0, "首页 / 概览", 2, 0, 0, 0, 36)
_UI_Text($g_hWin, $page0, "这是首页面板。点击上方标签即可切换到不同的界面。", 0, 0, 0, 24)
Global $rowStat = _UI_Row($g_hWin, $page0, 0, 0, 0, 80)
_UI_SetGap($g_hWin, $rowStat, 12)
Global $st1 = _UI_Statistic($g_hWin, $rowStat, "今日访客", "1,284", "人", 0, 0, 0, 72)
Global $st2 = _UI_Statistic($g_hWin, $rowStat, "订单", "326", "单", 0, 0, 0, 72)
Global $st3 = _UI_Statistic($g_hWin, $rowStat, "转化率", "12.3", "%", 0, 0, 0, 72)
_UI_SetFlexGrow($g_hWin, $st1, 1)
_UI_SetFlexGrow($g_hWin, $st2, 1)
_UI_SetFlexGrow($g_hWin, $st3, 1)

; 页 1:数据
Global $page1 = _UI_Column($g_hWin, $idContent, 0, 0, 0, 0)
_UI_SetFlexGrow($g_hWin, $page1, 1)
_UI_SetGap($g_hWin, $page1, 12)
_UI_Heading($g_hWin, $page1, "数据统计", 2, 0, 0, 0, 36)
_UI_Text($g_hWin, $page1, "本周完成度:", 0, 0, 0, 22)
_UI_Progress($g_hWin, $page1, 72, 0, 0, 0, 10)
_UI_Text($g_hWin, $page1, "每日订单量:", 0, 0, 0, 22)
_UI_Chart($g_hWin, $page1, $AUI_CHART_BAR, "12|19|8|15|22|7|18", "一|二|三|四|五|六|日", 0, 0, 0, 200)

; 页 2:设置
Global $page2 = _UI_Column($g_hWin, $idContent, 0, 0, 0, 0)
_UI_SetFlexGrow($g_hWin, $page2, 1)
_UI_SetGap($g_hWin, $page2, 12)
_UI_Heading($g_hWin, $page2, "设置", 2, 0, 0, 0, 36)
_UI_Switch($g_hWin, $page2, "开启桌面通知", True, 0, 0, 0, 28)
_UI_Switch($g_hWin, $page2, "自动检查更新", False, 0, 0, 0, 28)
_UI_Text($g_hWin, $page2, "主题:", 0, 0, 0, 22)
_UI_Combo($g_hWin, $page2, "跟随系统|浅色|深色", 0, 0, 0, 220, 36)

; 页 3:关于
Global $page3 = _UI_Column($g_hWin, $idContent, 0, 0, 0, 0)
_UI_SetFlexGrow($g_hWin, $page3, 1)
_UI_SetGap($g_hWin, $page3, 10)
_UI_Heading($g_hWin, $page3, "关于", 2, 0, 0, 0, 36)
_UI_Text($g_hWin, $page3, "AUI — 为 AutoIt 打造的现代化 Windows 界面库。", 0, 0, 0, 24)
_UI_Text($g_hWin, $page3, "版本:0.2.0 Beta", 0, 0, 0, 24)
_UI_Link($g_hWin, $page3, "访问 AutoIt 中文网", "https://autoitx.com", 0, 0, 0, 24)

; 收集面板 id,默认显示第 0 页(其余自动隐藏)
$g_aPages[0] = $page0
$g_aPages[1] = $page1
$g_aPages[2] = $page2
$g_aPages[3] = $page3
_UI_SwitchPanel($g_hWin, $g_aPages, 0)

_UI_WindowShow($g_hWin)
_UI_Run()

; ── 回调 ────────────────────────────────────────────────────────────────────
Func OnNav($id, $iValue)
        _UI_SwitchPanel($g_hWin, $g_aPages, $iValue)
EndFunc
左侧导航
#AutoIt3Wrapper_UseX64=n
#include "AUI.au3"

; ─── AUI 控件示例:左侧导航切换 ───  演示:点击左侧 Sidebar 导航项,右侧内容区切换到对应界面(首页 / 数据 / 设置 / 关于)
Global $g_hWin = _UI_WindowCreate("AUI 示例 — Sidebar导航与多页切换", 900, 600)
Global $g_aPages[4]                       ; 4 个内容面板的 id(回调里切换)

Global $idRoot = _UI_Column($g_hWin, 0)
_UI_SetPadding($g_hWin, $idRoot, 24)
_UI_SetGap($g_hWin, $idRoot, 14)
_UI_Heading($g_hWin, $idRoot, "导航与多页切换", 1, 0, 0, 0, 44)

; 主体:左 Sidebar + 右内容区(高度固定,撑满标题下方)
Global $idBody = _UI_Row($g_hWin, $idRoot, 0, 0, 0, 450)
_UI_SetGap($g_hWin, $idBody, 20)

; —— 左侧导航 ——
Global $sNav = _UI_Glyph($AUI_GLYPH_HOME, "首  页") & "|" & _
                _UI_Glyph($AUI_GLYPH_CHART, "数  据") & "|" & _
                _UI_Glyph($AUI_GLYPH_SETTINGS, "设  置") & "|" & _
                _UI_Glyph($AUI_GLYPH_INFO, "关  于")
Global $idNav = _UI_Sidebar($g_hWin, $idBody, $sNav, 0, 0, 120, 450)
_UI_OnValue($g_hWin, $idNav, "OnNav")

; —— 右侧内容区:4 个面板叠在同一区域,一次只显示一个 ——
Global $idContent = _UI_Column($g_hWin, $idBody, 0, 0, 0, 0)
_UI_SetFlexGrow($g_hWin, $idContent, 1)

; 页 0:首页 / 概览
Global $page0 = _UI_Column($g_hWin, $idContent, 0, 0, 0, 0)
_UI_SetFlexGrow($g_hWin, $page0, 1)
_UI_SetGap($g_hWin, $page0, 12)
_UI_Heading($g_hWin, $page0, "首页 / 概览", 2, 0, 0, 0, 36)
_UI_Text($g_hWin, $page0, "这是首页面板。点击左侧导航即可切换到不同的界面。", 0, 0, 0, 24)
Global $rowStat = _UI_Row($g_hWin, $page0, 0, 0, 0, 80)
_UI_SetGap($g_hWin, $rowStat, 12)
Global $st1 = _UI_Statistic($g_hWin, $rowStat, "今日访客", "1,284", "人", 0, 0, 0, 72)
Global $st2 = _UI_Statistic($g_hWin, $rowStat, "订单", "326", "单", 0, 0, 0, 72)
Global $st3 = _UI_Statistic($g_hWin, $rowStat, "转化率", "12.3", "%", 0, 0, 0, 72)
_UI_SetFlexGrow($g_hWin, $st1, 1)
_UI_SetFlexGrow($g_hWin, $st2, 1)
_UI_SetFlexGrow($g_hWin, $st3, 1)

; 页 1:数据
Global $page1 = _UI_Column($g_hWin, $idContent, 0, 0, 0, 0)
_UI_SetFlexGrow($g_hWin, $page1, 1)
_UI_SetGap($g_hWin, $page1, 12)
_UI_Heading($g_hWin, $page1, "数据统计", 2, 0, 0, 0, 36)
_UI_Text($g_hWin, $page1, "本周完成度:", 0, 0, 0, 22)
_UI_Progress($g_hWin, $page1, 72, 0, 0, 0, 10)
_UI_Text($g_hWin, $page1, "每日订单量:", 0, 0, 0, 22)
_UI_Chart($g_hWin, $page1, $AUI_CHART_BAR, "12|19|8|15|22|7|18", "一|二|三|四|五|六|日", 0, 0, 0, 220)

; 页 2:设置
Global $page2 = _UI_Column($g_hWin, $idContent, 0, 0, 0, 0)
_UI_SetFlexGrow($g_hWin, $page2, 1)
_UI_SetGap($g_hWin, $page2, 12)
_UI_Heading($g_hWin, $page2, "设置", 2, 0, 0, 0, 36)
_UI_Switch($g_hWin, $page2, "开启桌面通知", True, 0, 0, 0, 28)
_UI_Switch($g_hWin, $page2, "自动检查更新", False, 0, 0, 0, 28)
_UI_Text($g_hWin, $page2, "主题:", 0, 0, 0, 22)
_UI_Combo($g_hWin, $page2, "跟随系统|浅色|深色", 0, 0, 0, 220, 36)
_UI_Text($g_hWin, $page2, "缓存上限(%):", 0, 0, 0, 22)
_UI_Slider($g_hWin, $page2, 60, 0, 100, 0, 0, 0, 28)

; 页 3:关于
Global $page3 = _UI_Column($g_hWin, $idContent, 0, 0, 0, 0)
_UI_SetFlexGrow($g_hWin, $page3, 1)
_UI_SetGap($g_hWin, $page3, 10)
_UI_Heading($g_hWin, $page3, "关于", 2, 0, 0, 0, 36)
_UI_Text($g_hWin, $page3, "AUI — 为 AutoIt 打造的现代化 Windows 界面库。", 0, 0, 0, 24)
_UI_Text($g_hWin, $page3, "版本:0.2.0 Beta", 0, 0, 0, 24)
_UI_Link($g_hWin, $page3, "访问 AutoIt 中文网", "https://autoitx.com", 0, 0, 0, 24)

; 收集面板 id,默认显示第 0 页(其余自动隐藏)
$g_aPages[0] = $page0
$g_aPages[1] = $page1
$g_aPages[2] = $page2
$g_aPages[3] = $page3
_UI_SwitchPanel($g_hWin, $g_aPages, 0)

_UI_WindowShow($g_hWin)
_UI_Run()

; ── 回调 ────────────────────────────────────────────────────────────────────
; Sidebar / Tabs 点击都会回调 OnValue($id, $iValue),$iValue 是选中项的 0 基索引
Func OnNav($id, $iValue)
        _UI_SwitchPanel($g_hWin, $g_aPages, $iValue)
EndFunc
 楼主| 发表于 前天 12:55 | 显示全部楼层
life999 发表于 2026-6-14 16:24
新手怎么入门~~~~~~能解决新手入门的问题就好了

马上会添加每个控件的实例,以及更多应用实例
 楼主| 发表于 前天 13:02 | 显示全部楼层
记得下载最新UDF
发表于 前天 13:49 | 显示全部楼层
进度条的进度更新,怎么弄呢?
发表于 前天 17:23 | 显示全部楼层
好象不可以直接在设计工具里设置控件的颜色
发表于 前天 21:09 | 显示全部楼层
请教下如何将2D数组内容添加到table或者list控件里?
 楼主| 发表于 昨天 16:17 | 显示全部楼层
本帖最后由 繁星 于 2026-6-16 16:21 编辑
zhaoceshi 发表于 2026-6-15 21:09
请教下如何将2D数组内容添加到table或者list控件里?
#AutoIt3Wrapper_UseX64=n
#include "AUI.au3"

; ════════════════════════════════════════════════════════════════════════════
;  AUI 示例:2D 数组 → Table 虚表 + List 虚表(千万数据行)
;
;    虚表的正确用法:控件本身不存数据,只记“总行数”,滚到哪就回调取哪几行。
;    数据来源可以是:① 一个真实的 2D 数组(按行号取);② 现场计算;
;    ③ 从文件 / 数据库按行读。本例用方式①:把一份真实数据放进 2D 数组,
;    再让虚表按行号循环映射,从而用很小的内存显示 1000 万行。
; ════════════════════════════════════════════════════════════════════════════

Global Const $ROWS = 10000000      ; 虚表对外显示的总行数(1000 万)
Global Const $SEED = 10000        ; 实际存进 2D 数组的真实数据行数(安全、占用极小)
Global $g_aData[$SEED][3]         ; 列:姓名 / 城市 / 分数

; ── 生成 1 万行真实数据存入 2D 数组(很快、内存很小)──────────────────────
Local $aCities[5] = ["北京", "上海", "广州", "深圳", "杭州"]
Local $aNames[6]  = ["张伟", "李娜", "王芳", "赵磊", "陈静", "刘洋"]
For $i = 0 To $SEED - 1
        $g_aData[$i][0] = $aNames[Mod($i, 6)]
        $g_aData[$i][1] = $aCities[Mod($i, 5)]
        $g_aData[$i][2] = 60 + Mod($i * 7 + 13, 41)
Next

; ── 界面 ─────────────────────────────────────────────────────────────────
Global $g_h = _UI_WindowCreate("AUI — 2D 数组 → Table 虚表 + List 虚表(1000 万行)", 880, 600)
Global $root = _UI_Column($g_h, 0)
_UI_SetPadding($g_h, $root, 16)
_UI_SetGap($g_h, $root, 10)

Global $g_idStatus = _UI_Text($g_h, $root, "虚表显示 " & $ROWS & " 行(数据来自 " & $SEED & " 行 2D 数组循环映射)。点击任意行查看。", 0, 0, 0, 22)
_UI_SetColor($g_h, $g_idStatus, $AUI_COLOR_TRANSPARENT, $AUI_COLOR_BLUE)

Local $hdr = _UI_Row($g_h, $root, 0, 0, 0, 26)
_UI_SetGap($g_h, $hdr, 12)
Local $lh = _UI_Heading($g_h, $hdr, "Table 虚表(1000 万行 × 4 列)", 3, 0, 0, 0, 26)
Local $rh = _UI_Heading($g_h, $hdr, "List 虚表(1000 万行)", 3, 0, 0, 0, 26)
_UI_SetFlexGrow($g_h, $lh, 2)
_UI_SetFlexGrow($g_h, $rh, 1)

Local $cr = _UI_Row($g_h, $root, 0, 0, 0, 0)
_UI_SetGap($g_h, $cr, 12)
_UI_SetFlexGrow($g_h, $cr, 1)

; 左:Table 虚表
Global $g_idTable = _UI_Table($g_h, $cr, "编号|姓名|城市|分数", "", 0, 0, 0, 0)
_UI_SetFlexGrow($g_h, $g_idTable, 2)
_UI_TableSetColumnWeights($g_h, $g_idTable, "1,2,2,1")
_UI_TableVirtual($g_h, $g_idTable, $ROWS, 4)
_UI_TableOnCell($g_h, $g_idTable, "GetCell")
_UI_OnValue($g_h, $g_idTable, "OnTablePick")

; 右:List 虚表
Global $g_idList = _UI_List($g_h, $cr, "", 0, 0, 0, 0)
_UI_SetFlexGrow($g_h, $g_idList, 1)
_UI_ListVirtual($g_h, $g_idList, $ROWS)
_UI_ListOnCell($g_h, $g_idList, "GetRow")
_UI_OnValue($g_h, $g_idList, "OnListPick")

_UI_WindowShow($g_h)
_UI_Run()

; ── 虚表回调:按行号从 2D 数组循环映射取数据 ──────────────────────────────
; Table:返回 (行,列) 单元格文本
Func GetCell($iRow, $iCol)
        If $iRow < 0 Or $iRow >= $ROWS Then Return ""
        Local $k = Mod($iRow, $SEED)            ; 行号映射到 2D 数组
        Switch $iCol
                Case 0
                        Return $iRow + 1                   ; 编号唯一(1 ~ 1000 万)
                Case 1
                        Return $g_aData[$k][0]             ; 姓名
                Case 2
                        Return $g_aData[$k][1]             ; 城市
                Case 3
                        Return $g_aData[$k][2]             ; 分数
        EndSwitch
        Return ""
EndFunc

; List:返回整行文本
Func GetRow($iRow)
        If $iRow < 0 Or $iRow >= $ROWS Then Return ""
        Local $k = Mod($iRow, $SEED)
        Return "#" & ($iRow + 1) & "  " & $g_aData[$k][0] & "  " & $g_aData[$k][1] & "  " & $g_aData[$k][2] & " 分"
EndFunc

; ── 点击回调($iRow 为 0 基行号)──────────────────────────────────────────
Func OnTablePick($id, $iRow)
        If $iRow < 0 Or $iRow >= $ROWS Then Return
        Local $k = Mod($iRow, $SEED)
        _UI_SetText($g_h, $g_idStatus, "[Table] 第 " & ($iRow + 1) & " 行 → " & _
                $g_aData[$k][0] & " / " & $g_aData[$k][1] & " / " & $g_aData[$k][2] & " 分")
EndFunc

Func OnListPick($id, $iRow)
        If $iRow < 0 Or $iRow >= $ROWS Then Return
        Local $k = Mod($iRow, $SEED)
        _UI_SetText($g_h, $g_idStatus, "[List]  第 " & ($iRow + 1) & " 行 → " & _
                $g_aData[$k][0] & " / " & $g_aData[$k][1] & " / " & $g_aData[$k][2] & " 分")
EndFunc
 楼主| 发表于 昨天 16:18 | 显示全部楼层
you74222 发表于 2026-6-15 17:23
好象不可以直接在设计工具里设置控件的颜色

是的,目前不可以,后面会加上的
 楼主| 发表于 昨天 16:20 | 显示全部楼层
you74222 发表于 2026-6-15 13:49
进度条的进度更新,怎么弄呢?
#AutoIt3Wrapper_UseX64=n
#include "AUI.au3"

; ─── AUI 控件示例:Progress 进度条 ───  演示:不同百分比
Global $h = _UI_WindowCreate("AUI 控件 — Progress 进度条", 440, 300)
Global $c = _UI_Column($h, 0)
_UI_SetPadding($h, $c, 20)
_UI_SetGap($h, $c, 14)
_UI_Heading($h, $c, "Progress 进度条", 2, 0, 0, 0, 32)
_UI_Text($h, $c, "30%:", 0, 0, 0, 20)
_UI_Progress($h, $c, 30, 0, 0, 0, 10)
_UI_Text($h, $c, "60%:", 0, 0, 0, 20)
_UI_Progress($h, $c, 60, 0, 0, 0, 10)
_UI_Text($h, $c, "90%:", 0, 0, 0, 20)
_UI_Progress($h, $c, 90, 0, 0, 0, 10)
_UI_WindowShow($h)
_UI_Run()
#AutoIt3Wrapper_UseX64=n
#include "..\..\autoit\AUI.au3"

; ════════════════════════════════════════════════════════════════════════════
;  消息循环模式 2:_UI_PumpOnce(响应式自建循环)
;  适用:程序【自身需要持续做事】——轮询、动画、实时刷新等。
;  特点:自己写 While 循环,每轮调一次 _UI_PumpOnce() 抽取并处理待办消息(非阻塞),
;        这样界面不会卡死。_UI_PumpOnce() 返回 -1 表示窗口已关闭,退出循环即可。
;  对比:若在自己的 While 循环里不调 _UI_PumpOnce,界面会“假死”不响应。
; ════════════════════════════════════════════════════════════════════════════
Global $g_h = _UI_WindowCreate("循环模式 2 — _UI_PumpOnce 响应式循环", 480, 300)
Global $idClock, $idProg
Global $c = _UI_Column($g_h, 0)
_UI_SetPadding($g_h, $c, 24)
_UI_SetGap($g_h, $c, 14)
_UI_Heading($g_h, $c, "响应式循环模式(_UI_PumpOnce)", 2, 0, 0, 0, 34)
_UI_Text($g_h, $c, "下面的时间和进度由我们自己的 While 循环持续刷新,界面依然流畅:", 0, 0, 0, 44)
$idClock = _UI_Heading($g_h, $c, "当前时间:--:--:--", 1, 0, 0, 0, 44)
_UI_Text($g_h, $c, "自动增长的进度(满 100 后重来):", 0, 0, 0, 24)
$idProg = _UI_Progress($g_h, $c, 0, 0, 0, 0, 12)

_UI_WindowShow($g_h)

; —— 自建主循环:边跑自己的逻辑,边用 _UI_PumpOnce 保持界面响应 ——
Global $pct = 0
While 1
        If _UI_PumpOnce() = -1 Then ExitLoop      ; 窗口已关闭 → 退出循环
        ; 自己的周期性工作:
        _UI_SetText($g_h, $idClock, "当前时间:" & @HOUR & ":" & @MIN & ":" & @SEC)
        $pct += 2
        If $pct > 100 Then $pct = 0
        _UI_SetValue($g_h, $idProg, $pct)
        Sleep(60)
WEnd
发表于 昨天 17:49 | 显示全部楼层
繁星 发表于 2026-6-15 12:52
老版本没有map,升级

好的 大佬 换成Autoit3.3.18.0版本就可以了
发表于 昨天 17:52 | 显示全部楼层

OK ,我去试的玩一下
发表于 昨天 18:08 | 显示全部楼层

"D:\工作\目录\11\test\test.au3"(57,40) : 错误: _UI_ListVirtual(): 未定义函数.
_UI_ListVirtual($g_h, $g_idList, $ROWS)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
"D:\工作\目录\11\test\test.au3"(58,42) : 错误: _UI_ListOnCell(): 未定义函数.
_UI_ListOnCell($g_h, $g_idList, "GetRow")
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
未定义的函数??
发表于 昨天 18:42 | 显示全部楼层
设计器里,打开那里有历史记录就好了
发表于 昨天 21:17 | 显示全部楼层
 楼主| 发表于 5 小时前 | 显示全部楼层
you74222 发表于 2026-6-16 18:08
"D:\工作\目录\11\test\test.au3"(57,40) : 错误: _UI_ListVirtual(): 未定义函数.
_UI_ListVirtual($g_h ...

下载最新的库,目前测试版隔三岔五就会修改打磨,及时更新最新版
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2026-6-17 05:43 , Processed in 0.066102 second(s), 14 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表