当前位置: 首页 > news >正文

软件开发指南——GUI 开发方案推荐

1. LVGL (Light and Versatile Graphics Library)

适用场景:嵌入式设备、资源受限环境
优势

  • 专为嵌入式设计的开源 GUI 库,内存占用极小(最低仅需 64KB RAM)
  • 支持触摸屏、硬件加速(如 STM32 的 LTDC)
  • 提供丰富的控件(按钮、图表、列表等)和动画效果
    开发方式
  • 在嵌入式 Linux 上通过 FrameBufferSDL 驱动显示
  • 支持 C/Python/MicroPython 绑定
    示例代码(Python)
import lvgl as lv
lv.init()
# 初始化显示驱动(需根据硬件配置)
disp_buf = lv.disp_draw_buf_create()
disp_drv = lv.disp_drv_init()
lv.disp_drv_register(disp_drv)
# 创建按钮
btn = lv.btn(lv.scr_act())
btn.set_size(100, 50)
btn.align(lv.ALIGN.CENTER, 0, 0)
label = lv.label(btn)
label.set_text("Hello ATK-MD0430!")

2. SDL2 (Simple DirectMedia Layer)

适用场景:需要直接操作像素或硬件加速
优势

  • 低层级图形库,适合游戏或自定义 UI
  • 支持 OpenGL ES 加速(适合 Raspberry Pi 的 GPU)
  • 跨平台(Linux/Windows/嵌入式)
    开发方式
  • 通过 Python 的 pygame-sdl2 或直接使用 C 语言
    示例代码(Python)
import pygame
pygame.init()
screen = pygame.display.set_mode((480, 272))
running = True
while running:for event in pygame.event.get():if event.type == pygame.QUIT:running = Falsescreen.fill((0, 0, 255))  # 蓝色背景pygame.draw.rect(screen, (255, 0, 0), (100, 100, 200, 50))  # 红色矩形pygame.display.flip()

3. Flutter for Embedded (通过 Flutter-Pi)

适用场景:需要现代 UI 动画效果
优势

  • 使用 Dart 语言开发,跨平台支持
  • 硬件加速渲染,流畅的动画
  • 适合 Raspberry Pi(通过 flutter-pi 项目)
    限制
  • 需要嵌入式 Linux 系统(如 Raspberry Pi OS)
  • 内存占用较高(建议 512MB+ RAM)
    开发流程
  1. 在 PC 上用 Flutter 开发界面
  2. 交叉编译为 ARM 版本部署到嵌入式设备

4. 直接使用 FrameBuffer (Linux 原生方案)

适用场景:极简需求,完全控制像素
优势

  • 无需额外库,直接操作 /dev/fb0
  • 适合静态界面或简单图形
    示例代码(Python)
import numpy as np
import mmap
# 打开 FrameBuffer
with open("/dev/fb0", "r+b") as fb:fbuf = mmap.mmap(fb.fileno(), 480*272*2, mmap.MAP_SHARED)# 写入红色像素(RGB565格式)pixel_red = np.array([0xF800], dtype=np.uint16)fbuf.seek(0)fbuf.write(pixel_red.tobytes())

5. GTK3 (适用于 Raspberry Pi)

适用场景:传统 Linux GUI 应用
优势

  • Raspberry Pi 官方推荐(搭配 Raspbian)
  • 支持触摸屏和硬件加速
    示例代码(Python)
import gi
gi.require_version("Gtk", "3.0")
from gi.repository import Gtkclass MyWindow(Gtk.Window):def __init__(self):super().__init__(title="ATK-MD0430")self.set_default_size(480, 272)self.button = Gtk.Button(label="点击")self.button.connect("clicked", self.on_button_click)self.add(self.button)def on_button_click(self, widget):print("按钮被点击")win = MyWindow()
win.connect("destroy", Gtk.main_quit)
win.show_all()
Gtk.main()

选择建议

方案语言适合场景硬件要求开发难度
LVGLC/Python嵌入式专用 UI低资源(64KB+ RAM)中等
SDL2C/Python游戏/自定义图形需要 GPU 加速中等
FlutterDart现代动画 UI高资源(512MB+ RAM)
FrameBufferC/Python极简像素操作最低
GTK3Python传统 Linux 应用中等资源

推荐选择

  • 如果是 STM32 MCU + ATK-MD0430 → LVGL
  • 如果是 Raspberry PiGTK3(简单)或 Flutter(炫酷)
  • 如果需要 超低功耗LVGL 或直接操作 FrameBuffer

相关文章:

软件开发指南——GUI 开发方案推荐

1. LVGL (Light and Versatile Graphics Library) 适用场景:嵌入式设备、资源受限环境 优势: 专为嵌入式设计的开源 GUI 库,内存占用极小(最低仅需 64KB RAM)支持触摸屏、硬件加速(如 STM32 的 LTDC&…...

JDK8 HashMap的实现原理

一 HashMap底层存储结构 HashMap底层结构采用(数组)(链表 or 红黑树)的形式来存储节点。 首先HashMap是一个数组,而且数组里面每个位置可以放入多个元素,形象一点,咱们把数组的这些个位置称为桶…...

YOLO拓展-锚框(anchor box)详解

一.锚框(anchor box)概述 1.1什么是锚框 锚框就是一种进行预测的像素框,通过遍历输入图像上所有可能的像素框,然后选出正确的目标框,并对位置和大小进行调整就可以完成目标检测任务。 对于yolo锚框的建设须基于实际…...

U-Boot(Universal Bootloader)简介

U-Boot 是一种开源的、高度可定制的 引导加载程序(Bootloader),专为嵌入式系统和特定硬件平台设计。它负责在设备上电后初始化硬件、加载操作系统内核,并将控制权移交给操作系统,是嵌入式设备启动过程中不可或缺的核心…...

turtle库绘制进阶图形

要求: 1.绘制嵌套彩色五角星(大小逐层递减) 2. 设计函数绘制自定义正多边形(边数与颜色参数化) 3. 扩展:实现动态旋转花瓣图案 代码: import turtledef draw_nested_star():colors ["…...

[matlab]南海地形眩晕图代码

[matlab]南海地形眩晕图代码 请ChatGPT帮写个南海地形眩晕图代码 图片 图片 代码 .rtcContent { padding: 30px; } .lineNode {font-size: 12pt; font-family: "Times New Roman", Menlo, Monaco, Consolas, "Courier New", monospace; font-style: n…...

3. 进程概念

目录 1. 冯诺依曼体系结构 2. 操作系统 3. 理解进程的一般思路 4. 查看进程 5. fork初识 6. 进程状态 6.1 一般操作系统 6.2 Linux系统是怎么维护进程状态的 7. 进程优先级 先谈硬件-再谈软件-最后谈进程。 1. 冯诺依曼体系结构 我们常见的计算机(笔记本电…...

yolov8的数据处理lableimg的安装以及使用

视频数据集准备 video cv2.VideoCapture("./BVN.mp4") num 0 # 计数器 save_step 30 # 间隔帧 while True:rel, frame video.read()if not ret:breaknum 1if num % save_step 0:cv2.imwrite("./demo images/" str(num) ".jpg", frame)l…...

小刚说C语言刷题——1035 判断成绩等级

1.题目描述 输入某学生成绩,如果 86分以上(包括 86分)则输出 VERY GOOD ,如果在 60到 85之间的则输出 GOOD (包括 60和 85),小于 60 的则输出 BAD。 输入 输入只有一行,包括 1个整数。 输出 输出只有一行&#xf…...

Spring 依赖冲突解决方案详解

引言 在Spring框架中,依赖管理是一个核心功能,它使得开发者能够轻松地管理应用程序中的各种组件和服务。然而,随着项目的增长和复杂度的增加,依赖冲突问题也变得日益常见。本文将详细介绍Spring中不同类型的依赖冲突及其解决方法…...

P11299 [NOISG 2021 Finals] Fraud 题解

题目背景 你被任命为第 24 届全国信息学奥林匹克竞赛的负责人! 题目描述 本次竞赛共有 N 名参赛者和 2 轮比赛。第 i 名参赛者在第一轮获得了分,在第二轮获得了 分。 每轮比赛分别有一个正整数权重 X 和 Y。第 i 名参赛者的最终得分​ 计算公式为&a…...

AI时代下 你需要和想要了解的英文缩写含义

在AI智能时代下,越来愈多的企业都开始重视并应用以及开发AI相关产品,这个时候都会或多或少的涉及到英文,英文还好,但是如果是缩写,如果我们没有提前了解过,我们往往很难以快速Get到对方的意思。在这里&…...

大数据平台简介

一、分布式系统基础架构 (一)定义与核心特征 分布式系统是由多台计算机(节点)通过网络协作组成的系统,对外表现为一个统一整体。其核心特征包括: 去中心化:节点平等或分角色协作(如…...

电脑端移植至手机平板:攻克难题,仙盟架构显神通——仙盟创梦IDE

在将电脑端应用移植到手机和平板的过程中,常面临诸多棘手问题。像 1.x 号关闭按钮因位置设计欠佳,难以被用户精准点击,字体过小导致阅读与操作不便等。未来之窗仙盟创梦凭借创新的仙盟架构,巧妙且高效地化解了这些困扰开发者与用户…...

基于Python的中国象棋小游戏的设计与实现

基于Python的中国象棋小游戏的设计与实现 第一章 绪论1.1 研究背景1.2 研究意义 第二章 需求分析2.1 需求分析2.1.1核心功能需求2.1.2 用户体验需求2.1.3 衍生功能需求 2.2 可行性分析2.2.1 技术可行性2.2.2 经济可行性2.2.3 市场可行性2.2.4 法律与合规性 第三章 概要设计3.1 …...

HCIP --- OSPF综合实验

一、拓扑图 二、实验要求 1,R5为ISP,其上只能配置IP地址;R4作为企业边界路由器,出口公网地址需要通过PPP协议获取,并进行chap认证。 2,整个0SPF环境IP基于172.16.0.8/16划分。 3,所有设备均可访问R5的环…...

【OpenGL】OpenGL学习笔记-1:VS2019配置OpenGL开发环境

在Visual Studio 2019中可以通过手动配置库文件或NuGet包管理器快速安装的方法配置OpenGL环境,详细步骤如下: 一、打开VS2019,创建新的控制台项目 二、方法一:手动配置GLEW/GLFW/GLAD库 GLFW是窗口管理和输入事件的基础设施&…...

GWAS_LD

局部LDblock 绘图 1. 查看显著位点附近基因情况 链接pvalue显著位点文件 ln -s ~/yiyaoran/GWAS/my_GWAS_J/P3.GWAS/01.tassel/mlm_output.manht_figure.sigSite.out . #也可以自己筛选awk $2 9 && $4 < 0.000028481 mlm_output.manht_input>368_GWAS.snpsnp两…...

WinForms开发基础:实现带X按钮的ClearableTextBox控件

前言 我们经常看到这样的带X按钮的输入框 如果使用WinForms开发中&#xff0c;该如何进行设计&#xff0c;普通的TextBox控件如何进行改造&#xff1f;为了提升用户体验&#xff0c;在TextBox文本框内添加一个“x”按钮&#xff0c;方便用户一键清除内容。本文将介绍如何通过继…...

直线轴承常规分类知多少?

直线轴承的分类方式多样&#xff0c;以下是从材质、结构形状和常规系列三个维度进行的具体分类&#xff1a; 按主要材质分类 外壳材质&#xff1a;常见的有不锈钢&#xff0c;具有良好的耐腐蚀性&#xff0c;适用于一些对环境要求较高、易受腐蚀的工作场景&#xff1b;轴承…...

算法期末复习

算法期末复习 1.单选题 \1. 二分搜索算法是利用( A)实现的算法。 A. 分治策略 B. 动态规划法 C. 贪心法 D. 回溯法 \2. 回溯法解旅行售货员问题时的解空间树时( C ) 。 A. 子集树 B. 深度优先生成树 C. 排序树 D. 广度优先生成树 \3. 下列算法中通常以自底向上的方式求解最…...

LeetCode 5:最长回文子串

1、题目描述 给你一个字符串 s&#xff0c;找到 s 中最长的 回文 子串。 示例 1: 输入&#xff1a;s "babad" 输出&#xff1a;"bab" 解释&#xff1a;"aba" 同样是符合题意的答案。 示例 2: 输入&#xff1a;s "cbbd" 输出&#…...

2025年4月19日 记录大模型出现的计算问题

2025年4月19日 记录大模型出现的计算问题&#xff0c;用了四个大模型计算json的数值&#xff0c;3个错误&#xff0c;1个正确 问题 Class Train Val answer 2574 853 screen 5025 1959 blackBoard 7847 3445 teacher 8490 3228 stand…...

Python语法系列博客 · 第3期 数据结构入门(列表、元组、字典、集合)

上一期小练习解答&#xff08;第2期回顾&#xff09; ✅ 练习1&#xff1a;判断一个数是正数、负数还是零 num float(input("请输入一个数&#xff1a;")) if num > 0:print("正数") elif num < 0:print("负数") else:print("零&q…...

【对Linux文件权限的深入理解】

Linux文件权限 Linux下权限概念概念相关命令 Linux的文件权限管理1.文件访问者的分类&#xff08;⼈&#xff09;文件类型和访问权限&#xff08;事物属性&#xff09;文件权限值的表示方法⽂件访问权限的相关设置方法目录的权限&#xff08;比较重要&#xff09;粘滞位 Linux下…...

2025.04.19【Spider】| 蜘蛛图绘制技巧精解

Basic multi-group radar chart Start with a basic version, learn how to format your input dataset Radar chart with ggradar A Spider chart made using the ggradar package and a lot of customization.A work by Tuo Wang 文章目录 Basic multi-group radar chartRa…...

AtCoder ABC402 A~D 题解

A - CBC 题目大意 给点字符串 S S S&#xff0c;输出其中所有大写字母。 思路 根据题意模拟即可。 代码 #include <cstdio> #include <iostream> #include <algorithm> using namespace std;int main() {string s;cin >> s;for (int i 0; i &l…...

双指针算法(部分例题解析)

快慢指针左右指针 前言 双指针&#xff0c;它通过设置两个指针来遍历数据&#xff0c;从而实现高效的查找、排序、去重等操作。双指针算法的核心在于通过合理地移动这两个指针&#xff0c;减少不必要的遍历&#xff0c;提高算法的效率。 283. 移动零 - 力扣&#xff08;LeetCo…...

PHP怎样判断浏览器类型和浏览器语言?

获取浏览器类型 $_SERVER[HTTP_USER_AGENT]包含了用户代理字符串&#xff0c;该字符串包含了浏览器、操作系统等信息。通过分析这个字符串&#xff0c;可以大致判断用户使用的浏览器类型。 <?phpfunction getBrowserType() {$userAgent $_SERVER[HTTP_USER_AGENT];$brow…...

利用 i2c 快速从 Interface 生成 Class

利用 i2c 快速从 Interface 生成 Class&#xff08;支持 TS & ArkTS&#xff09; 在日常 TypeScript 或 ArkTS 开发中&#xff0c;需要根据 interface 定义手动实现对应的 class&#xff0c;这既重复又容易出错。分享一个命令行工具 —— interface2class&#xff0c;简称…...

Vue+Notification 自定义消息通知组件 支持数据分页 实时更新

效果图&#xff1a; message.vue 消息组件 子组件 <template><div class"custom-notification"><div class"content"><span click"gotoMessageList(currentMessage.split()[1])">{{ currentMessage.split()[0] }}</…...

机械设计【】技术要求(实际使用)

目录 台板技术要求加工件技术要求钣金件技术要求工装型腔技术要求铝型材框架技术要求装配体技术要求焊接件技术要求1(外形尺寸≥1500mm)焊接件技术要求2(外形尺寸<1500mm)焊接件技术要求3(不锈钢)其他要求台板技术要求 1.台板下表面周边不倒角,其余未注倒角C0.5; 2.去…...

遨游科普:防爆平板是指什么?有哪些应用场景?

在石油开采平台的炽热甲板、化工园区的反应釜旁、矿井巷道的瓦斯弥漫区&#xff0c;总能看到一群手持特殊设备的作业人员。他们手中的平板并非寻常消费电子产品&#xff0c;而是专门应对极端环境的防爆平板。防爆平板承载着工业安全的核心诉求&#xff0c;其技术演进与应用拓展…...

【GCC】gcc编译学习

文章目录 1. 过程2. 常用命令选项3. 多个源文件编译参考内容 1. 过程 step1 : 预处理&#xff0c;生成.i文件&#xff08;预处理器cpp&#xff09; gcc -E [源文件] -o [生成的.i文件] gcc -E test.c -o test.istep2 : 汇编&#xff0c;将预处理后的文件转换为汇编语言生成.s…...

不确定与非单调推理的可信度方法

可信度方法是肖特里菲(E.H.Shortliffe)等人在确定性理论(Theoryof Comfirmation)的基础上,结合概率论等提出的一种不确定性推理方法,首先在专家系统MYCIN中得到了成功的应用。由于该方法比较直观、简单,而且效果也比较好,因而受到人们的重视。目前,许多专家系统都是基于…...

个人自用-导入安装Hexo

因为本人原来就有备份好的资料&#xff0c;所以重新安装起来会很方便&#xff0c;这个教程也只适合我自己用 但是所有的命令行都要在Git的命令行里面使用&#xff08;因为我就是这样操作的&#xff09; 1 安装Git Git的官网 Git git --version 这个是查看Git的版本 git --…...

2025年最新版 Git和Github的绑定方法,以及通过Git提交文件至Github的具体流程(详细版)

文章目录 Git和Github的绑定方法与如何上传至代码仓库一. 注册 GitHub 账号二.如何创建自己的代码仓库&#xff1a;1.登入Github账号&#xff0c;完成登入后会进入如下界面&#xff1a;2.点击下图中红色框选的按钮中的下拉列表3.选择New repostitory4.进入创建界面后&#xff0…...

Java 动态代理实现

Java 动态代理实现 一、JDK动态代理二、CGLIB动态代理三、动态代理的应用场景四、JDK代理与CGLIB代理比较 动态代理是Java中一种强大的技术&#xff0c;它允许在运行时创建代理对象&#xff0c;用于拦截对目标对象的方法调用。 一、JDK动态代理 JDK动态代理是Java标准库提供的代…...

从零开始搭建CLIP模型实现基于文本的图像检索

目录 CLIP原理简介代码实现参考链接 CLIP原理简介 论文链接&#xff0c;源码链接 CLIP模型由OpenAI在2021年提出&#xff0c;利用双Decoder&#xff08;Dual Encoder&#xff09;的架构来学习图像和文本之间的对应关系&#xff0c;是多模态大模型的开创之作&#xff0c;为后续许…...

健康养生之道

在快节奏的现代生活中&#xff0c;健康养生不再是中老年人的专属话题&#xff0c;越来越多的人开始意识到&#xff0c;合理的养生方式是保持良好身体状态和生活质量的关键。​ 饮食养生是健康的基石。遵循 “食物多样、谷类为主” 的原则&#xff0c;保证每天摄入足够的蔬菜、…...

基于autoware.1.14与gazebo联合仿真进行Hybrid A* 算法规划控制代价地图版

1.首先安装autoware &#xff0c;大家可以以下一下博客进行安装&#xff0c;如果缺少库什么的直接问ai安装对应的库就行。ubuntu18.04安装Autoware1.14---GPU版 最全环境配置说明_autoware1.14安装教程-CSDN博客 安装成功后运行&#xff1a; source install/setup.bash roslau…...

5G基站设计难题:尺寸、重量、功耗和散热

设计5G基站的工程师们必须应对能源消耗、重量、尺寸和散热等问题&#xff0c;这些因素会影响到设计决策。 5G新空口&#xff08;NR&#xff09;采用了多用户大规模多输入多输出&#xff08;MU-MIMO&#xff09;技术、集成接入与回传&#xff08;IAB&#xff09;技术&#xff0…...

【leetcode100】分割等和子集

1、题目描述 给你一个 只包含正整数 的 非空 数组 nums 。请你判断是否可以将这个数组分割成两个子集&#xff0c;使得两个子集的元素和相等。 示例 1&#xff1a; 输入&#xff1a;nums [1,5,11,5] 输出&#xff1a;true 解释&#xff1a;数组可以分割成 [1, 5, 5] 和 [11…...

sed命令笔记250419

sed命令笔记250419 sed&#xff08;Stream Editor&#xff09;是 Linux/Unix 系统中强大的流编辑器&#xff0c;主要用于对文本进行过滤和转换&#xff08;按行处理&#xff09;。它支持正则表达式&#xff0c;适合处理文本替换、删除、插入等操作。以下是 sed 的详细解析&…...

LinearLayout 线性布局

目录 Android LinearLayout&#xff08;线性布局&#xff09;简单介绍与使用示例 一、效果介绍 二、布局文件&#xff08;XML&#xff09; 三、Java 代码 四、程序运行效果 五、总结 在 Android 移动应用开发中&#xff0c;LinearLayout&#xff08;线性布局&#xff09;…...

System.in 详解

System.in 详解 System.in 是 Java 提供的标准输入流&#xff08;InputStream 类型&#xff09;&#xff0c;默认关联键盘输入&#xff0c;通常用于从控制台读取用户输入。由于它是字节流&#xff08;InputStream&#xff09;&#xff0c;直接使用较麻烦&#xff0c;一般会配合…...

JAVA IO、BIO、NIO、AIO及零拷贝

概述 IO,常写作 I/O,是 Input/Output 的简称,是 Input/Output 的简称,即输入/输出。通常指数据在内部存储器(内存)和外部存储器(硬盘、优盘等)或其他周边设备之间的输入和输出。 目前有三种 IO 共存。分别是 BIO、NIO 和 AIO。 BIO 全称 Block-IO 是一种同步且阻塞的…...

AI预测3D新模型百十个定位预测+胆码预测+去和尾2025年4月19日第57弹

从今天开始&#xff0c;咱们还是暂时基于旧的模型进行预测&#xff0c;好了&#xff0c;废话不多说&#xff0c;按照老办法&#xff0c;重点8-9码定位&#xff0c;配合三胆下1或下2&#xff0c;杀1-2个和尾&#xff0c;再杀6-8个和值&#xff0c;可以做到100-300注左右。 (1)定…...

REST 架构详解:从概念到应用的全面剖析

REST&#xff08;Representational State Transfer&#xff09;即表述性状态转移&#xff0c;是一种用于构建网络应用程序的架构风格和设计理念&#xff0c;由计算机科学家罗伊・菲尔丁&#xff08;Roy Fielding&#xff09;在 2000 年提出。以下是关于它的详细介绍&#xff1a…...

SICAR程序标准功能块 FB1512 “Robot_kuka_FB“

1、FB1512功能块截图 2、FB1512 功能块引脚功能定义 一、输入引脚 EN:使能输入,决定功能块是否执行。IDENTIFIER(WSTRING#"FW010_R01"):设备标识,指定关联的机器人设备。OPMODE_USER_INTERFACE_OUT:操作模式输入,定义机器人工作模式(如手动、自动),数据源…...