fyne 选项卡设计

news2025/1/23 5:50:08

用户界面的设计至关重要,它直接影响着用户体验。选卡设计作为一种常见的界面布局方式,能够有效地组织和展示信息,使用户能够方便快捷地浏览和操作。

Fyne 是一个用 Go 语言编写的跨平台 GUI 框架,它提供了丰富的组件和功能,使得我们可以轻松地实现各种复杂的用户界面,包括选卡设计。

二、示例代码解析

我们来看一段基于 Fyne 框架实现的包含选卡相关元素的代码示例:

package main

import (
    "fyne.io/fyne/v2"
    "fyne.io/fyne/v2/app"
    "fyne.io/fyne/v2/canvas"
    "fyne.io/fyne/v2/container"
    "fyne.io/fyne/v2/storage"
    "fyne.io/fyne/v2/widget"
)

type data struct {
    name    string
    level   string
    price   string
    status  string
    percent string
}

func main() {
    a := app.New()
    w := a.NewWindow("用户卡片点击交互")

    // 设置图片URL
    imageURL := "https://candy-circle-copy.oss-cn-qingdao.aliyuncs.com/image/2024812/imFvgJJeHTyYuKFlPrSlUvFYYbldxlna.jpg"

    u, _ := storage.ParseURI(imageURL)
    imgResource := canvas.NewImageFromURI(u)
    //imgResource.FillMode = canvas.ImageFillContain
    imgResource.SetMinSize(fyne.NewSize(100, 100))

    data1 := []data{
        {name: "用户1", level: "等级1", price: "10元", status: "在线", percent: "99%"},
        {name: "用户2", level: "等级2", price: "20元", status: "离线", percent: "99%"},
        {name: "用户3", level: "等级2", price: "20元", status: "离线", percent: "92%"},
        {name: "用户4", level: "等级3", price: "30元", status: "在线", percent: "89%"},
    }
    var items []fyne.CanvasObject

    for _, v := range data1 {

        userCard := container.NewGridWithColumns(2,
            imgResource,
            container.NewVBox(
                container.NewHBox(
                    widget.NewLabel(v.name),
                    widget.NewLabel(v.status),
                ),
                container.NewHBox(
                    widget.NewLabel(v.level),
                    widget.NewLabel(v.percent),
                ),
                widget.NewLabel(v.price),
            ))

        items = append(items, userCard)
    }

    content := container.NewVBox(items...)

    w.SetContent(content)

    w.Resize(fyne.NewSize(300, 600))
    w.ShowAndRun()
}

效果预览
在这里插入图片描述

  1. 初始化应用和窗口
    代码开始部分创建了一个 Fyne 应用实例 a 和一个窗口实例 w,并设置了窗口的标题为“用户卡片点击交互”。这是构建 Fyne 应用的基本步骤,为后续的界面元素添加提供了容器。

  2. 加载图片资源
    通过指定图片的 URL,使用 storage.ParseURI 方法将其解析为 Fyne 能够识别的 URI 对象,然后利用 canvas.NewImageFromURI 方法创建一个图片组件 imgResource。并设置了图片的最小尺寸,以确保图片在界面中以合适的大小显示。这一步骤展示了如何在 Fyne 中加载和处理外部图片资源,为选卡设计中的视觉元素提供了支持。

  3. 数据结构和数据初始化
    定义了一个名为 data 的结构体,用于存储用户的相关信息,如姓名、等级、价格、状态和百分比。然后初始化了一个 data 类型的切片 data1,包含了多个用户的数据。这些数据将用于填充选卡中的具体内容。

  4. 创建用户卡片
    通过循环遍历 data1 切片,为每个用户创建一个用户卡片。每个卡片使用 container.NewGridWithColumns 方法创建一个两列的网格布局,左侧放置图片,右侧使用垂直布局 container.NewVBox 嵌套水平布局 container.NewHBox 来展示用户的详细信息,如姓名、状态、等级、百分比和价格。这种布局方式清晰地将用户信息分组展示,符合选卡设计中信息组织的原则。

  5. 添加卡片到界面
    将所有创建的用户卡片添加到一个 items 切片中,然后使用 container.NewVBox 将这些卡片垂直排列,并设置为窗口的内容。最后,调整窗口的大小并显示窗口。

三、选卡设计的优化与扩展

  1. 交互功能添加
    当前代码只是展示了用户卡片的静态布局,我们可以进一步添加交互功能,如点击卡片时弹出详细信息窗口或执行特定操作。可以通过为卡片添加点击事件处理函数来实现这一功能。

  2. 样式和主题定制
    Fyne 支持丰富的样式和主题定制,我们可以为用户卡片和整个界面设置不同的颜色、字体、边框等样式,以提升界面的美观度和一致性。通过创建自定义主题或使用 Fyne 提供的主题接口,可以轻松实现这一点。

  3. 动态数据更新
    在实际应用中,数据可能是动态变化的。我们可以通过监听数据的变化,实时更新用户卡片的内容,确保界面展示的信息始终是最新的。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

MySQL——主从同步

提醒:进行配置时,需要确保一主两从的操作系统、MySQL版本一致,否则将出现问题 环境介绍 服务器IP主服务器172.25.254.10从服务器-1172.25.254.11从服务器-2172.25.254.12 配置 # 快速配置,选择多重执行,确保版本一…

IDEA中Maven使用的踩坑与最佳实践

文章目录 IDEA中Maven使用的踩坑与最佳实践一、环境配置类问题1. Maven环境配置2. IDEA中Maven配置建议 二、常见问题与解决方案1. 依赖下载失败2. 依赖冲突解决3. 编译问题修复 三、效率提升技巧1. IDEA Maven Helper插件使用2. 常用Maven命令配置3. 多模块项目配置4. 资源文件…

VIVADO-block desgn 中时钟连线报错

问题描述 1.自定义的IP核由于封装不规范,输出的时钟引脚缺少该时钟的相关信息 正常时钟引脚属性 异常的时钟引脚属性 2.run connection automation 中无法找到这种缺少信息的时钟源 3.axi_clk与axi interconnect时钟频率不匹配 解决方案: 1.用BUFG将缺少…

CSDN 博客之星 2024:默语的技术进阶与社区耕耘之旅

CSDN 博客之星 2024:默语的技术进阶与社区耕耘之旅 🌟 默语,是一位在技术分享与社区建设中坚持深耕的博客作者。今年,我有幸再次入围成为 CSDN 博客之星TOP300 的一员,这既是对过往努力的肯定,也是对未来探…

BUUCTF_Web(UPLOAD COURSE 1)

打开靶机,发现需要上传文件,尝试一句话木马蚁剑链接 一句话木马 【基本原理】利用文件上传漏洞,往目标网站中上传一句话木马,然后你就可以在本地通过中国菜刀chopper.exe即可获取和控制整个网站目录。表示后面即使执行错误&#…

车载软件架构 --- CP和AP作为中央计算平台的软件架构双核心

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 简单,单纯,喜欢独处,独来独往,不易合同频过着接地气的生活…

docker ubuntu:20.04构建c++ grpc环境

由c grpc必须源码编译,ubuntu版本不同可能出现的问题也不同,这里分享下我的构建过程。 我是vscode结合docker去安装c虚拟环境,我不想污染本机环境。 vscode的插件Dev Containers Dockerfile如下(如果单纯是ubuntu环境构建,可忽略该…

PV-RCNN、PV-RCNN++ 网络结构

paper: PV-RCNN https://arxiv.org/abs/1912.13192PV-RCNN https://arxiv.org/abs/2102.00463 github:使用OpenPCDet进行训练测试 https://github.com/open-mmlab/OpenPCDet PV-RCNN 简介 PV-RCNN的提出是想要综合 point-based 和 voxel-based 3D目…

认识c++

文章目录 1namespace 写博客 ,做作业 笔记很关键 1namespace ::域作用限定域 局部域>全局域>命名空间域(展开了命名空间域or指定访问命名空间域) 不要轻易展开 可以这样解决 方案一 方案二 using namespace std; 直接展开会有风…

接口 V2 完善:基于责任链模式、Canal 监听 Binlog 实现数据库、缓存的库存最终一致性

🎯 本文介绍了一种使用Canal监听MySQL Binlog实现数据库与缓存最终一致性的方案。文章首先讲解了如何修改Canal配置以适应订单表和时间段表的变化,然后详细描述了通过责任链模式优化消息处理逻辑的方法,确保能够灵活应对不同数据表的更新需求…

内容中台实施最佳实践解析与应用指南

内容概要 内容中台是一个旨在提升企业内容管理与分发能力的战略性平台,其实施最佳实践对于企业在数字化转型中尤为重要。内容中台的建设,不仅涉及技术层面的架构设计,还需结合组织变革、业务流程优化等多个方面,以实现高效、灵活…

顺序表和链表(详解)

线性表 线性表( linear list)是n个具有相同特性的数据元素的有限序列。 线性表是一种在实际中广泛使用的数据结构,常见的线性表:顺序表、链表、栈、队列、字符串... 线性表在逻辑上是线性结构,也就说是连续的一条直线。…

TCP全连接队列

1. 理解 int listen(int sockfd, int backlog) 第二个参数的作用 backlog:表示tcp全连接队列的连接个数1。 如果连接个数等于backlog1,后续连接就会失败,假设tcp连接个数为0,最大连接个数就为1,并且不accept获取连接…

C语言程序环境与预处理—从源文件到执行程序,这里面有怎么的工序?绝对0基础!

正文开始前,我们简单聊上一聊! 众所周知!编译器的功能非常强大的,我们在编译软件上敲的每一行代码,点击执行,就会输出结果,从代码-->输出结果,这中间经历了怎样的一个过程&#…

第35天:安全开发-JavaEE应用原生反序列化重写方法链条分析触发类类加载

时间轴: 序列化与反序列化图解: 演示案例: Java-原生使用-序列化&反序列化 Java-安全问题-重写方法&触发方法 Java-安全问题-可控其他类重写方法 Java-原生使用-序列化&反序列化 1.为什么进行序列化和反序列化&#xff1…

硬件作品3----STM32F103RCT6最小系统板MCU配置

参考文章:对stm32F103RCT6原理图解析(详细)-CSDN博客 本想绘制稍微复杂一些的电路,但是出现很多问题,因此先绘制一块最小系统板进行原理、绘制方法的验证。 设计难度:★ 适合人群:初学者 一、…

SparkSQL数据源与数据存储综合实践

文章目录 1. 打开项目2. 查看数据集2.1 查看JSON格式数据2.2 查看CSV格式数据2.3 查看TXT格式数据 3. 添加单元测试依赖4. 创建数据加载与保存对象4.1 创建Spark会话对象4.2 创建加载JSON数据方法4.3 创建加载CSV数据方法4.4 创建加载Text数据方法4.5 创建加载JSON数据扩展方法…

【回忆迷宫——处理方法+DFS】

题目 代码 #include <bits/stdc.h> using namespace std; const int N 250; int g[N][N]; bool vis[N][N]; int dx[4] {0, 0, -1, 1}; int dy[4] {-1, 1, 0, 0}; int nx 999, ny 999, mx, my; int x 101, y 101; //0墙 (1空地 2远方) bool jud(int x, int y) {if…

项目中使用的是 FastJSON(com.alibaba:fastjson)JSON库

从你的 pom.xml 文件中可以看到&#xff0c;项目明确依赖了以下 JSON 库&#xff1a; FastJSON&#xff1a; <dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.47</version> </depende…

高效安全文件传输新选择!群晖NAS如何实现无公网IP下的SFTP远程连接

文章目录 前言1. 开启群晖SFTP连接2. 群晖安装Cpolar工具3. 创建SFTP公网地址4. 群晖SFTP远程连接5. 固定SFTP公网地址6. SFTP固定地址连接 前言 随着远程办公和数据共享成为新常态&#xff0c;如何高效且安全地管理和传输文件成为了许多人的痛点。如果你正在寻找一个解决方案…