d亚当的迷你gui
原文
minigui
唯一依赖是arsd.simpledisplay
和arsd.color
,simpledisplay
提供低级接口,而minigui
在之上构建组件窗口.
首要目标不是像GTK
和Qt
那样庞大和复杂,而是有用.并不十分关注外观
,在窗口
上,它只使用本地
控件和原生
主题,在Linux
上,它保持简单.
在2021
年5月之后,可用类似css
的Widget.Style
,(在窗口
上,如果用-version=custom_widgets
编译,也可自定义实现,但是最好不要这样.)
事件模型
类似浏览器中的js
,而布局引擎
类似cssflexbox
自动适应
.
为了最佳
效果:确保-L/SUBSYSTEM:WINDOWS:5.0
这样链接,否则有缺陷.
HTML
转类
HTML 代码 | Minigui 类 |
---|---|
<input type="text"> | 行编辑 |
<textarea> | 文字编辑 |
<select> | 下拉选择 |
<input type="checkbox"> | 可选框 |
<input type="radio"> | 单选框 |
<button> | 按钮 |
拉伸:默认值4
.可用更大
数字来,表示会占用大量
空间.
折叠输入
即推出:minigui
将包括一些同事件循环
工作的I/O
功能,如果想玩花样,建议用另一个线程,并来回提交
事件.
插件
请见arsd
仓库中的minigui_addons
来找可单独导入的插件.
XML
定义
用arsd.minigui_xml
,可从xml
创建组件树.
可脚本
minigui
兼容arsd.script
.如果看到文档中@可脚本(@scriptable)
方法,表示可从脚本
语言调用
它.
提示:要从脚本
轻松创建组件树
,请导入arsd.minigui_xml
,并使arsd.minigui_xml.makeWidgetFromString
可用.
import arsd.minigui_xml;
import arsd.script;
var globals = var.emptyObject;
globals.makeWidgetFromString = &makeWidgetFromString;
// 现在工作
interpret(`var window = makeWidgetFromString("<MainWindow />");`, globals);
请等待更多.
示例
你好
示例有个超大按钮,这是你的第一个窗口
!
import arsd.minigui;
void main() {
auto window = new MainWindow();
auto hello = new TextLabel("你好啊,", TextAlignment.Center, window);
auto button = new Button("关闭", window);
button.addWhenTriggered({
window.close();
});
window.loop();
}
示例
展示了分割窗口
为标题
和边栏
方法.在此,页眉和边栏
具有固定宽度
,而其余内容
与窗口一致.
也许网格布局(GridLayout)
更符合思维,但这里概念
是划分
窗口为具有特定大小
,然后再子划分
.
因此,要制作标题
,要从有最大高度
的子布局
开始.它从顶部使用该空间
,然后剩余子
划分剩下区域
,一块一块的切.
import arsd.minigui;
// 使布局盒可见
class ColorWidget : Widget {
this(Color color, Widget parent) {
this.color = color;
super(parent);
}
Color color;
class Style : Widget.Style {
override WidgetBackground background() { return WidgetBackground(color); }
}
mixin OverrideStyle!Style;
}
void main() {
auto window = new Window;
// 给它最大高
auto header = new class HorizontalLayout {
this() { super(window); }
override int maxHeight() { return 50; }
};
// 下行为快捷方式,但只适用HorizontalLayout和VerticalLayout且不明显,要了解如何创建新类
// auto header = new HorizontalLayout(50, window);
auto bar = new HorizontalLayout(window);
//或由于很常见,VerticalLayout和HorizontalLayout都只能在构造函数中分别接受`最大宽度/高度`
auto left = new VerticalLayout(100, bar);
// 主节容器.普通`Widget`实例就够了
auto container = new Widget(bar);
// 在上面为屏幕截图制作的容器添加颜色
// 应用中,可只添加实际控件
auto headerColorBox = new ColorWidget(Color.teal, header);
auto leftColorBox = new ColorWidget(Color.green, left);
auto rightColorBox = new ColorWidget(Color.purple, container);
window.loop();
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现