Python: DearPyGui介绍和使用

文章目录

Dear PyGui 是一个高性能、GPU 加速的 Python GUI 框架,专为构建现代、响应迅速的图形用户界面而设计。它使用 即时模式(Immediate Mode) 的 GUI 范式(类似 ImGui),非常适合快速原型开发、科学可视化、调试工具和交互式应用。


一、核心特点

  • GPU 加速:基于 ImGui 和自定义 Vulkan/OpenGL 后端,渲染性能极高。
  • 即时模式 GUI:UI 逻辑与程序逻辑混合编写,每次帧刷新都重新构建界面,状态由用户变量控制。
  • 原生 Python 接口:无需 XML 或模板文件,全部用 Python 编写。
  • 跨平台:支持 Windows、macOS、Linux。
  • 丰富的组件:按钮、滑块、表格、绘图、3D 渲染、文件对话框、主题定制等。
  • 与 NumPy 高度兼容:特别适合科学计算和数据可视化。

二、安装

pip install dearpygui 

三、基础使用示例

1. 最简 Hello World

import dearpygui.dearpygui as dpg dpg.create_context() dpg.create_viewport(title="Hello World", width=400, height=300) dpg.setup_dearpygui()with dpg.window(label="Main Window"): dpg.add_text("Hello, Dear PyGui!") dpg.add_button(label="Click me") dpg.show_viewport() dpg.start_dearpygui() dpg.destroy_context()

2. 响应按钮点击

defbutton_callback():print("Button clicked!")with dpg.window(): dpg.add_button(label="Say Hello", callback=button_callback)

3. 动态更新文本

defupdate_text(): dpg.set_value("text_id",f"Count: {dpg.get_value('slider_id')}")with dpg.window(): dpg.add_slider_int(tag="slider_id", label="Value", default_value=0, max_value=100, callback=update_text) dpg.add_text("Count: 0", tag="text_id")

四、常用组件

组件函数
按钮dpg.add_button()
文本输入dpg.add_input_text()
滑块dpg.add_slider_float(), dpg.add_slider_int()
复选框dpg.add_checkbox()
表格dpg.add_table(), dpg.add_table_column(), dpg.add_table_row()
绘图dpg.add_plot(), dpg.add_line_series()
文件选择dpg.add_file_dialog()

五、绘图示例(Plotting)

import numpy as np x = np.linspace(0,10,100).tolist() y = np.sin(x).tolist()with dpg.window():with dpg.plot(label="Sin Wave", height=300, width=500): dpg.add_plot_axis(dpg.mvXAxis, label="x")with dpg.plot_axis(dpg.mvYAxis, label="sin(x)"): dpg.add_line_series(x, y, label="sin(x)")

六、主题与样式

dpg.bind_theme(dpg.mvTheme_Dark)# 内置暗色主题# 或自定义主题with dpg.theme()as custom_theme:with dpg.theme_component(dpg.mvButton): dpg.add_theme_color(dpg.mvThemeCol_Button,(0,150,0)) dpg.bind_theme(custom_theme)

七、适用场景

  • 科学计算参数调优界面
  • 机器学习实验控制面板
  • 实时数据监控(如传感器、仿真)
  • 游戏/图形工具原型
  • 教学演示工具

八、注意事项

  • 即时模式 ≠ 保留模式:每次 start_dearpygui() 循环都会重新执行 UI 代码,不要在 UI 构建中做耗时操作。
  • 状态管理:所有状态需由 Python 变量维护(如 dpg.get_value(tag) / dpg.set_value(tag, value))。
  • 性能优势:即使每秒更新数千个控件,依然流畅(得益于 GPU 渲染)。

九、官方资源

  • 官网:https://dearpygui.org/
  • GitHub:https://github.com/hoffstadt/DearPyGui
  • 文档:https://dearpygui.readthedocs.io/
  • 示例库:https://github.com/hoffstadt/DearPyGui/tree/master/DearPyGui/dearpygui/demo.py(运行 dpg.show_demo() 可查看)

Read more

初探算法的魅力——【暴力枚举】

初探算法的魅力——【暴力枚举】

点击下面查看作者专栏🔥🔥C语言专栏🔥🔥🌊🌊编程百度🌊🌊🌠🌠如何获取自己的代码仓库🌠🌠 🌐索引与导读 * 暴力枚举(BF)的概念 * 暴力枚举的算法步骤 * 例题讲解 * 经典案例讲解一:百鸡问题 * 题目解析 * 思路方案 * 经典案例讲解二:盛最多水的容器 * 暴力枚举算法 * 最优解 * 经典案例讲解三:两数之和 * 经典案例讲解四:2025 * 💻 代码实现 * 希望读者多多三连 * 给小编一些动力 * 蟹蟹啦! 暴力枚举(BF)的概念 暴力枚举也称为穷举法,是计算机算法中最基础、最直观,但也是最费劲的一种解题思路 像我们平时没有最优解的算法题,往往都可以通过暴力枚举去算出最终结果 * 核心思想 不靠巧妙的技巧,而是利用计算机强大的计算能力,把所有可能的情况列举出来,一个一个去验证,直到找到正确答案 暴力枚举的算法步骤 * 列举 :确定解空间的范围,列出所有可能的解候选者 * 检验 :对每一个候选者进行判断,看它是否满足题目

关于hashset和hashmap,还有treeset和treemap,四个的关系

TreeSet 和 TreeMap 是 Java 集合框架中两个重要的类,它们的关系非常紧密。简单来说,TreeSet 是基于 TreeMap 实现的。 可以将它们的关系理解为:TreeSet 是一个只包含“键”的 TreeMap。 下面详细解释一下: 1. 核心实现关系 在 Java 的源代码中,TreeSet内部维护了一个 TreeMap对象(或 NavigableMap对象)作为其核心存储。当您向 TreeSet中添加一个元素时,这个元素实际上被当作 key放入了内部的 TreeMap中,而 value则是一个固定的、无意义的占位对象。 2. 共同特征(因为它们共享同一个底层结构) * 有序性:它们都会对元素(对 TreeMap来说是键)进行自然排序(元素实现 Comparable接口)或根据构造时传入的 Comparator 进行排序。

Flutter 三方库 hashids2 基于鸿蒙安全内核的深度隐匿映射适配:数字指纹泄露防御层、生成短小精悍唯一不可逆加盐哈希,护航全链路请求 URL 隐私-适配鸿蒙 HarmonyOS ohos

Flutter 三方库 hashids2 基于鸿蒙安全内核的深度隐匿映射适配:数字指纹泄露防御层、生成短小精悍唯一不可逆加盐哈希,护航全链路请求 URL 隐私-适配鸿蒙 HarmonyOS ohos

欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.ZEEKLOG.net Flutter 三方库 hashids2 基于鸿蒙安全内核的深度隐匿映射适配:突破高敏感数字指纹泄露防御层、生成短小精悍唯一不可逆加盐哈希,护航全链路请求 URL 隐私资产 在鸿蒙应用的高度依赖数据隐私(如隐藏数据库递增 ID、生成短网址或混淆用户主页链接)中,如何将枯燥的数字转换为非连续、看似随机且人类友好的标识符?hashids2 库提供了一套基于 Hashids 协议的工业级加密 ID 生成方案。本文将详解该库在 OpenHarmony 上的适配要点。 前言 什么是 hashids2?当你在 URL 中展示 user/123 时,攻击者很容易通过猜测 124 或 125 来爬取你的数据。hashids2 能够根据你设定的盐值(Salt)。将整数 123 转换为类似

【数据结构指南】栈

【数据结构指南】栈

前言:         厨房里叠放的盘子想必大家都见过,新洗好的只能放在最顶层,使用时也必须从最上层开始取。羽毛球桶里的羽毛球也是如此,用过的球只能放回顶层,取用时也必须从最上层拿取。这些日常场景里,其实都藏着一种重要的数据结构:栈。         关于栈的一个笑话:从前有一家客栈,客栈有一条规矩:最早进来的人最晚上菜,最晚进来的人最早上菜。有一天,一个人早早来到客栈吃饭,发现一个比他来的还晚的人已经吃完饭走了,而店主还没上自己的菜。吃完饭后他问店主这是为什么,店主回答:“因为我们是客栈啊。 本文系统讲解栈这一数据结构,从基础概念到实际应用进行全面剖析。通过清晰的逻辑和丰富的实例,即使是数据结构初学者也能轻松掌握核心要点。 一、栈的基本概念          1.1栈的定义         栈  (stack) 是一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作,其核心特性遵循后进先出原则,这种特性可以形象地类比为叠放盘子的过程:最晚放入的盘子  (后进)  会被最先取出  (先出)  ,而最早放入的盘子  (先进)  则最后才能取出  (后出)