Fyne ( go跨平台GUI )中文文档- 架构 (八)完结

本文档注意参考官网(developer.fyne.io/) 编写, 只保留基本用法

go代码展示为Go 1.16 及更高版本, idegoland2021.2

 这是一个系列文章:

Fyne ( go跨平台GUI )中文文档-入门(一)-CSDN博客

Fyne ( go跨平台GUI )中文文档-Fyne总览(二)-CSDN博客

Fyne ( go跨平台GUI )中文文档-绘图和动画(三)-CSDN博客

Fyne ( go跨平台GUI )中文文档-容器和布局 (四)-CSDN博客

Fyne ( go跨平台GUI )中文文档-小部件 (五)-CSDN博客

Fyne ( go跨平台GUI )中文文档- 数据绑定 (六)-CSDN博客

Fyne ( go跨平台GUI )中文文档- 扩展Fyne (七)-CSDN博客

Fyne ( go跨平台GUI )中文文档- 架构 (八)完结-CSDN博客

8 架构

8.1 几何学

Fyne 应用程序基于每个窗口 1 个画布。每个画布都有一个根 CanvasObject,它可以是单个小部件或许多子对象的容器,其大小和位置由布局控制。

位置

每个画布的原点位于左上角 (0, 0),UI 的每个元素都可以根据输出设备进行缩放,因此 API 不描述像素或精确测量值。例如,在 120DPI 显示器上,位置 (10, 10) 可能从原点向右和向下 10 像素,但在 HiDPI(或“Retina”)显示器上,这可能更接近 20 像素。

CanvasObject 引用的每个位置都相对于它的父级。这对于布局算法很重要,但对于Tappable.Tapped(PointEvent)处理程序等情况下的开发人员也很重要。这里的 X/Y 坐标将从按钮的左上角而不是整个画布计算。这是为了让代码尽可能独立。

像素大小

与其他基于矢量的 GUI 库一样,Fyne 坐标需要基于一些基线监视器分辨率。所有[缩放]都与此值相关。对于 fyne,分辨率为 120DPI。这意味着fyne.Size当您的显示器为 120DPI 并且比例值都设置为 1 时,其中提到的尺寸将为 1=1px。对于 HiDPI 屏幕,如上所述,实际 DPI 可能更接近 240,在移动设备上它可以甚至是360或更高。为了管理处理这种复杂性,工具包在内部管理缩放,因此您的应用程序将始终看起来正确的大小。如果用户将比例设置为更小,那么他们的应用程序将始终具有比正常字体、按钮等更小的字体,并且当他们指定更大时,您的应用程序将按比例放大以适应。

与Material Design相比,我们可以看到它们的基线 DPI 为160,尽管数学相似,但实际数字会有所不同。这意味着 Fyne 中与设备无关的尺寸使用较小的数字来表示相同的物理尺寸。例如,18在 Fyne 中较高的图标将24在标准材料设计(例如 Android)应用程序中调整大小。这在构建应用程序时无关紧要,但在与具有 Material Design 的设计师或专家合作时可能很重要。

如果您开始加载位图图像,那么像素大小会很重要。通常这些会适当缩放,但如果您指定 FillMode=fyne.FillOriginal,则由于像素密度,不同设备上的实际图像大小会有所不同。通常,此功能将在Scroll容器内使用。Fyne 还定义了一个canvas.Raster原语,它将精确地以输出设备的像素密度绘制像素。这使您的代码能够以尽可能高的输出分辨率进行绘制,而无需了解您正在运行的设备的详细信息。如果由于某种原因需要“像素完美”定位,则需要CanvasObject.Size()*Canvas.Scale().

8.2 缩放

Fyne 完全使用矢量图形构建,这意味着用 Fyne 编写的应用程序可以完美地缩放到任何大小(不仅仅是整数增量)。这对于移动设备和高端计算机上越来越受欢迎的高密度显示器来说是一个很大的好处。计算默认比例值以匹配您的操作系统 - 在某些系统上这是用户配置,而在其他系统上则根据屏幕的像素密度(DPI - 每英寸点数)。如果 Fyne 窗口移动到另一个屏幕,它将重新缩放并相应地调整窗口大小!我们称之为“自动缩放”,它旨在让应用程序用户界面在您更改显示器时保持相同大小。
您可以使用应用程序的FYNE_SCALE或通过使用环境变量fyne_settings设置特定比例来调整应用程序的大小。这些值可以使内容大于或小于系统设置,使用“1.5”将使内容变大 50% 或设置 0.8 将使其变小 20%。

8.3 小部件

Fyne 工具包中的小部件专为干净和愉快的用户交互而设计,遵循标准主题并支持快速应用程序开发、可靠测试和易于维护。有多种设计考虑可以促进这种雄心壮志,我们将在此页面中进行探讨。

行为 API

关于标准小部件,您会注意到的一件事是 API 完全与行为和状态有关 - 但很少控制元素的实际外观。这是设计使然。它使我们的代码和应用程序开发人员的代码能够专注于小部件的行为,以便它的渲染过程可以留给其他代码。这使得测试变得更加容易,事实上完整的应用程序可以通过内存中的单元测试运行,而无需渲染应用程序。

您可以[扩展现有小部件] 以添加新行为,而无需担心它是如何呈现的。也可以[编写自己的]组件,应用程序不限于使用提供的小部件集。在构建自己的小部件时,您会注意到渲染细节与状态完全分开 - 这是上面提到的设计的一部分。 WidgetRenderer(呈现代码Widget)通常包含对将呈现以访问状态或其他信息的小部件的引用。当小部件状态发生变化时,将Refresh()调用 - 然后将要求渲染器刷新并且它应该更新显示以反映新状态。建议自定义小部件使用当前的Theme但可以选择在需要的地方指定自己的尺寸、颜色和图标。

内容填充

标准小部件使用主题指定的填充在其图形组件周围留出适当的空间。在该v2.0.0版本中,大多数小部件的高度和基线都进行了标准化,以确保标准布局在默认情况下能够很好地对齐。如果您正在构建自定义小部件,建议您遵循这些准则。

的值theme.Padding()在布局中用于分隔容器的元素,它在应用程序的各个部分周围创建标准化空间。然而,一些小部件的内容应该从范围的边缘插入。考虑一下Entry,它有一个背景和一个延伸到边缘的下划线,但它的内容应该是插入的。所以我们已经标准化了用于插入的间距量,以便对齐匹配。

小部件的标准插入或内容填充当前定义为2*theme.Padding()padding的标准值是 4表示标准插图是8. 您可以看到(文本)内容Label 以及Entry如何插入这么多,以便它们的内容在彼此相邻放置时将水平和垂直对齐。

建议自定义小部件包含相似的尺寸,以便它们与标准小部件很好地配合。

8.4 组织和包

Fyne 项目分为许多包,每个包提供不同类型的功能。它们如下:

  • fyne.io/fyne/v2

这个导入提供了所有 Fyne 代码通用的基本定义

包括数据类型和接口。

  • fyne.io/fyne/v2/app

应用程序包提供启动新应用程序的 API。

通常你只需要app.New()或app.NewWithID()。

  • fyne.io/fyne/v2/canvas

canvas 包提供了 Fyne 中的所有绘图 API。

完整的 Fyne 工具包由这些原始图形类型组成。

  • fyne.io/fyne/v2/container

容器包提供了用于布局和组织应用程序的容器。

  • fyne.io/fyne/v2/data/binding

绑定包包含将数据源绑定到小部件的方法。

  • fyne.io/fyne/v2/data/validation

验证包为验证小部件内的数据提供收费。

  • fyne.io/fyne/v2/dialog

对话框包包含确认、错误和文件保存/打开等对话框。

  • fyne.io/fyne/v2/layout

布局包提供各种布局实现供使用

使用容器(在后面的教程中讨论)。

  • fyne.io/fyne/v2/storage

存储包提供存储访问和管理功能。

  • fyne.io/fyne/v2/test

使用测试中的工具可以更轻松地测试应用程序
包裹。

  • fyne.io/fyne/v2/widget

大多数图形应用程序都是使用一组小部件创建的。

Fyne 中的所有小部件和交互元素都在这个包中。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/429741.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

《深度学习》PyTorch 手写数字识别 案例解析及实现 <下>

目录 一、回顾神经网络框架 1、单层神经网络 2、多层神经网络 二、手写数字识别 1、续接上节课代码,如下所示 2、建立神经网络模型 输出结果: 3、设置训练集 4、设置测试集 5、创建损失函数、优化器 参数解析: 1)para…

ArcGIS10.2/10.6安装包下载与安装(附详细安装步骤)

相信从事地理专业的小伙伴来说,应该对今天的标题不会陌生。Arcgis是一款很常用的地理信息系统软件,主要用于地理数据的采集、管理、分析和展示。目前比较常见的版本有ArcGIS 10.2和ArcGIS 10.6。 不可否认,Arcgis具有强大的地图制作、空间分…

DataGrip在Windows和MacOS平台上的快捷键

0. 背景信息 No.说明1测试DataGrip版本号 : 2024.2.2 1. Windows下快捷键 2. MacOS下快捷键

CentOS Stream 9部署Redis

1、安装Redis sudo dnf install redis 2、启动Redis服务 sudo systemctl start redis 3、设置Redis开机自启 sudo systemctl enable redis 4、打开Redis配置文件: sudo vi /etc/redis/redis.conf 在配置文件中找到并修改以下两行,确保密码验证功能已启…

Docker 容器技术:颠覆传统,重塑软件世界的新势力

一、Docker简介 什么是docker Docker 是一种开源的容器化平台,它可以让开发者将应用程序及其所有的依赖项打包成一个标准化的容器,从而实现快速部署、可移植性和一致性。 从功能角度来看,Docker 主要有以下几个重要特点: 轻量…

数据结构——串的模式匹配算法(BF算法和KMP算法)

算法目的: 确定主串中所含子串(模式串)第一次出现的位置(定位) 算法应用: 搜索引擎、拼写检查、语言翻译、数据压缩 算法种类: BF算法(Brute-Force,又称古典的…

web基础—dvwa靶场(七)SQL Injection

SQL Injection(SQL注入) SQL Injection(SQL注入),是指攻击者通过注入恶意的SQL命令,破坏SQL查询语句的结构,从而达到执行恶意SQL语句的目的。SQL注入漏洞的危害是巨大的,常常会导致…

『功能项目』QFrameWorkBug关联Slot(插槽)【67】

我们打开上一篇66QFrameWorkBug拖拽功能的项目, 本章要做的事情是关联插槽Slot 修改脚本:UISlot.cs 修改脚本:UGUICanvas.cs 此时关联Slot已经完成 接下来的文章内容: 1.QFrameWork扔到地上UGUI 2.位置存储功能 3.点击名称寻…

VMware ESXi 8.0U3b macOS Unlocker OEM BIOS 2.7 集成网卡驱动和 NVMe 驱动 (集成驱动版)

VMware ESXi 8.0U3b macOS Unlocker & OEM BIOS 2.7 集成网卡驱动和 NVMe 驱动 (集成驱动版) 发布 ESXi 8.0U3 集成驱动版,在个人电脑上运行企业级工作负载 请访问原文链接:https://sysin.org/blog/vmware-esxi-8-u3-sysin/,查看最新版…

10.3拉普拉斯金字塔

实验原理 拉普拉斯金字塔(Laplacian Pyramid)是一种图像表示方法,常被用于图像处理和计算机视觉领域。它是基于高斯金字塔的一种变换形式,主要用于图像融合、图像金字塔的构建等场景。下面简要介绍拉普拉斯金字塔的基本原理。 高…

【优选算法之二分查找】No.5--- 经典二分查找算法

文章目录 前言一、二分查找模板:1.1 朴素二分查找模板1.2 查找区间左端点模板1.3 查找区间右端点模板 二、二分查找示例:2.1 ⼆分查找2.2 在排序数组中查找元素的第⼀个和最后⼀个位置2.3 搜索插⼊位置2.4 x 的平⽅根2.5 ⼭脉数组的峰顶索引2.6 寻找峰值…

实现人体模型可点击

简化需求:实现项目内嵌人体模型,实现点击不同部位弹出部位名称 一:优先3d, 方案:基于three.js,.gltf格式模型,vue3 缺点:合适且免费的3d模型找不到,因为项目对部位有要…

【记录】Excel|不允许的操作:合并或隐藏单元格出现的问题列表及解决方案

人话说在前:这篇的内容是2022年5月写的,当时碰到了要批量处理数据的情况,但是又不知道数据为啥一直报错报错报错,说不允许我操作,最终发现是因为存在隐藏的列或行,于是就很无语地写了博客,但内容…

Java笔试面试题AI答之单元测试JUnit(5)

文章目录 25. 简述什么是Junit 忽略测试(Ignore Test)?一、基本概念二、使用方法三、注意事项四、示例 26. 简述什么是Junit 超时测试(Timeout Test)?Junit 超时测试的主要特点包括:实现方式&am…

全国832个贫困县名单及精准扶贫脱贫数据(2016-2020.11)

自党的十八大以来,通过全党全国各族人民的共同努力,中国成功实现了现行标准下9899万农村贫困人口的全部脱贫,832个贫困县全部摘帽。 摘帽名单 2016年-2020.11全国832个贫困县名单及精准扶贫脱贫数据整理(大数据)https…

JavaEE:探索网络世界的魅力——玩转UDP编程

文章目录 UDPUDP的特点UDP协议端格式校验和前置知识校验和具体是如何工作的? UDP UDP的特点 UDP传输的过程类似于寄信. 无连接: 知道对端的IP和端口号就直接进行传输,不需要建立连接.不可靠: 没有确认机制,没有重传机制,如果因为网络故障导致该段无法到达对方,UDP协议也不会…

nodejs基于vue+express度假村旅游管理系统设计与实现7t82p

目录 功能介绍数据库设计具体实现截图技术栈技术论证解决的思路论文目录核心代码风格详细视频演示源码获取 功能介绍 实现了一个完整的农家乐系统,其中主要有用户表模块、关于我们模块、收藏表模块、公告信息模块、酒店预订模块、酒店信息模块、景区信息模块、景区…

基于YOLOv5的教室人数检测统计系统

基于YOLOv5的教室人数检测统计系统可以有效地用于监控教室内的学生数量,适用于多种应用场景,比如 自动考勤、安全监控或空间利用分析 以下是如何构建这样一个系统的概述,包括环境准备、数据集创建、模型训练以及如何处理不同类型的媒体输入…

音乐项目,总结

今天的写的思路都挺简单的但是比较繁琐&#xff0c;这个查找&#xff0c;传文件的话可以了&#xff0c;但是没有用分片传送&#xff0c;然后在写音乐播放的处理&#xff0c;<歌单&#xff0c;二级评论&#xff0c;歌曲歌词滚轮播放>三个还没有实现&#xff0c;时间挺紧张…

开源免费的NAS系统-TrueNAS CORE上创建CentOS7虚拟机

目录 文章目录 目录1、说明2、准备工作2.1、准备安装镜像2.1、创建用户2.2、开启 ssh 服务2.3、设置用户权限2.4、上传系统镜像2.5、 添加虚拟机 3、开始安装系统3.1、启动虚拟机3.2、选择语言3.3、配置网络3.4、设置 root 密码3.5、删除光驱3.6、重启虚拟机3.7、使用 ssh 连接…