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

Python GUI 框架 -- DearPyGui 简易入门

DearPyGui

关于

DPG 是一个简单且功能强大的 Python 图形用户界面框架。

与其他Python图形用户界面库相比,DPG具有以下独特之处:

  • GPU 渲染
  • 多线程
  • 高度可定制
  • 内置开发人员工具:主题检查、资源检查、运行时指标
  • 带有数百种小部件组合的 70 多个小部件
  • 详细的文档、示例和支持

Dear PyGui文档: https://www.osgeo.cn/dearpygui/index.html

安装与运行

pip install dearpygui

首次运行:

import dearpygui.dearpygui as dpgdpg.create_context()
dpg.create_viewport(title='Custom Title', width=600, height=300)with dpg.window(label="Example Window"):dpg.add_text("Hello, world")dpg.add_button(label="Save")dpg.add_input_text(label="string", default_value="Quick brown fox")dpg.add_slider_float(label="float", default_value=0.273, max_value=1)dpg.setup_dearpygui()
dpg.show_viewport()
dpg.start_dearpygui()
dpg.destroy_context()

运行后效果图如下:
图1

演示文档

DPG 有一个完整的内置演示/展示案例。研究一下这个演示可以帮助快速开发。

import dearpygui.dearpygui as dpg
import dearpygui.demo as demodpg.create_context()
dpg.create_viewport(title='Custom Title', width=600, height=600)demo.show_demo()dpg.setup_dearpygui()
dpg.show_viewport()
dpg.start_dearpygui()
dpg.destroy_context()

如图:
图2

注意:

主脚本必须始终执行如下代码:

  • 创建上下文:create_context
  • 创建视区:create_viewport
  • 设置 dearpygui:setup_dearpygui
  • 显示该视口中:show_viewport
  • 启动 Dearpygui:start_dearpygui
  • 清理环境:destroy_context

即所有 DPG 应用程序必须做 3 件事:

  • 创建和销毁上下文
  • 创建和显示视区
  • 设置和启动 DearPyGui

主窗口

DPG 可以将一个窗口指定为主窗口。主窗口将填充该视口并始终绘制在其他窗口的后面。

import dearpygui.dearpygui as dpgdpg.create_context()with dpg.window(tag="Primary Window"):dpg.add_text("Hello, world")dpg.add_button(label="Save")dpg.add_input_text(label="string", default_value="Quick brown fox")dpg.add_slider_float(label="float", default_value=0.273, max_value=1)dpg.create_viewport(title='Custom Title', width=600, height=200)
dpg.setup_dearpygui()
dpg.show_viewport()
dpg.set_primary_window("Primary Window", True)
dpg.start_dearpygui()
dpg.destroy_context()

如图:
图3

Tag

DPG 使用 “add_*” 添加组件,每一个组件都有一个 tag,如不显示设置,则由 DPG 自动生成。tag 可以是整数或字符串,用于唯一指定该组件,一个 DPG 实例中,tag 不可重复。整数 0-10 保留用于 DPG 内部项目。

import dearpygui.dearpygui as dpgdpg.create_context()with dpg.window(label="Tutorial"):b0 = dpg.add_button(label="button 0")b1 = dpg.add_button(tag=100, label="Button 1")dpg.add_button(tag="Btn2", label="Button 2")print(b0)
print(b1)
print(dpg.get_item_label("Btn2"))dpg.create_viewport(title='Custom Title', width=600, height=200)
dpg.setup_dearpygui()
dpg.show_viewport()
dpg.start_dearpygui()
dpg.destroy_context()

如图:
图4

创建容器

下面将向代码中添加一个窗口、一个组和子窗口。可以直接将项添加到上下文管理器,也可以稍后通过指定父项来添加项。

import dearpygui.dearpygui as dpgdpg.create_context()with dpg.window(label="Tutorial"):dpg.add_button(label="Button 1")dpg.add_button(label="Button 2")with dpg.group():dpg.add_button(label="Button 3")dpg.add_button(label="Button 4")with dpg.group() as group1:pass
dpg.add_button(label="Button 6", parent=group1)
dpg.add_button(label="Button 5", parent=group1)dpg.create_viewport(title='Custom Title', width=600, height=400)
dpg.setup_dearpygui()
dpg.show_viewport()
dpg.start_dearpygui()
dpg.destroy_context()

回调

回调通过在激活组件时指定要运行的函数来赋予组件功能,并且 DPG 中的几乎所有 UI 组件都可以运行回调。

可以在创建组件时通过参数 callback 设置回调参数,也可以通过方法 set_item_callback 在创建完组件后分配回调函数。

import dearpygui.dearpygui as dpgdpg.create_context()def button_callback(sender, app_data, user_data):print(f"sender is: {sender}")print(f"app_data is: {app_data}")print(f"user_data is: {user_data}")with dpg.window(label="Tutorial"):# user data and callback set when button is createddpg.add_button(label="Apply", callback=button_callback, user_data="Some Data")# user data and callback set any time after button has been createdbtn = dpg.add_button(label="Apply 2", )dpg.set_item_callback(btn, button_callback)dpg.set_item_user_data(btn, "Some Extra User Data")dpg.create_viewport(title='Custom Title', width=800, height=600)
dpg.setup_dearpygui()
dpg.show_viewport()
dpg.start_dearpygui()
dpg.destroy_context()

如图:
图5

回调最多可以有 3 个参数,顺序如下。

sender:提交回调的 UI 组件的 id。
app_data:有时,UI 组件会发送它们自己的数据(例如文件对话框,checkbox 的是否选中)。
user_data:要发送给该函数的任何 Python 对象。

组件默认值

几乎所有 UI 组件都有一个默认值 default_value 可以在添加组件时设置初始值,当然也可以在组件创建完成后再设置这个值,设置后还可以获取这个值。分别使用 set_value 和 get_value。

以下是在创建 input_text 和 slider_float 组件时同时设置默认值 default_value,然后借助回调函数通过 get_value 获取设置的值。

import dearpygui.dearpygui as dpgdpg.create_context()def print_value(sender):""" 获取组件的值 """print(dpg.get_value(sender))with dpg.window(width=300):input_txt1 = dpg.add_input_text()# The value for input_text2 will have a starting value# of "This is a default value!"input_txt2 = dpg.add_input_text(label="InputTxt2",default_value="This is a default value!",callback=print_value)slider_float1 = dpg.add_slider_float()# The slider for slider_float2 will have a starting value# of 50.0.slider_float2 = dpg.add_slider_float(label="SliderFloat2",default_value=50.0,callback=print_value)dpg.set_item_callback(input_txt1, print_value)dpg.set_item_callback(slider_float1, print_value)print(dpg.get_value(input_txt1))print(dpg.get_value(input_txt2))print(dpg.get_value(slider_float1))print(dpg.get_value(slider_float2))dpg.create_viewport(title='Custom Title', width=800, height=600)
dpg.setup_dearpygui()
dpg.show_viewport()
dpg.start_dearpygui()
dpg.destroy_context()

也可以在创建完组件 slider_int 后,通过 set_value 设置 default_value,需要 tag 确定是哪个组件。

import dearpygui.dearpygui as dpgdpg.create_context()with dpg.window(width=300):# Creating a slider_int widget and setting the# default value to 15.dpg.add_slider_int(default_value=15, tag="slider_int")# On second thought, we're gonna set the value to 40
# instead - for no reason in particular...
dpg.set_value("slider_int", 40)dpg.create_viewport(title='Custom Title', width=800, height=600)
dpg.setup_dearpygui()
dpg.show_viewport()
dpg.start_dearpygui()
dpg.destroy_context()

文件和目录选择器

文件对话框项目可用于选择单个文件、多个文件或目录。

import dearpygui.dearpygui as dpgdpg.create_context()def callback(sender, app_data):print('OK was clicked.')print("Sender: ", sender)print("App Data: ", app_data)def cancel_callback(sender, app_data):print('Cancel was clicked.')print("Sender: ", sender)print("App Data: ", app_data)dpg.add_file_dialog(directory_selector=True, show=False, callback=callback, tag="file_dialog_id",cancel_callback=cancel_callback, width=700 ,height=400)with dpg.window(label="Tutorial", width=800, height=300):dpg.add_button(label="Directory Selector", callback=lambda: dpg.show_item("file_dialog_id"))dpg.create_viewport(title='Custom Title', width=800, height=600)
dpg.setup_dearpygui()
dpg.show_viewport()
dpg.start_dearpygui()
dpg.destroy_context()

如图:
图6

有更多配置可用,可以根据文件扩展名设置不同文件的颜色,可以允许创建固定菜单、收藏夹、目录树等。

其他

可以通过 dpg.menu() 和 dpg.add_menu_item() 设置菜单栏,通过 dpg.popup() 设置弹窗,通过 dpg.tooltip() 设置提示。

甚至有绘图功能,draw_line() 绘制线,draw_text() 绘制文本,draw_arrow() 绘制箭头,draw_image() 加载一些图像。通过 add_image() 加载图片。

dpg.table() 和 dpg.add_table_column()、dpg.table_row() 可以创建一些常用的表格。

更多内容

import dearpygui.dearpygui as dpgdpg.create_context()# DPG 包括几个可帮助开发和调试应用程序的工具
dpg.show_documentation()
dpg.show_debug()
dpg.show_about()# 内置的样式编辑器允许您在运行时尝试所有样式选项
dpg.show_style_editor()# 组件注册表以分层结构显示正在运行的应用程序的所有组件
dpg.show_item_registry()# 字体管理器显示所有加载的字体及其合适的大小,允许您检查随每个字体文件加载的所有字符或字形
dpg.show_font_manager()# 运行时指标实时显示应用程序的性能
dpg.show_metrics()dpg.create_viewport(title='Custom Title', width=800, height=600)
dpg.setup_dearpygui()
dpg.show_viewport()
dpg.start_dearpygui()
dpg.destroy_context()

如图:
图7
总之,DearPyGUI 是一个还不错的 Python GUI 框架,相较于 PyQt、PySide,虽然历史还不够久,文档可能还不够丰富,应用上还没有很大规模,但是有自己独特的方面,由于是 GPU 实时渲染,所以没有很多内置的本地组件,但组件丰富度并不少,又库本身较小,对于打包比较友好。

http://www.xdnf.cn/news/1483687.html

相关文章:

  • JavaScript 入门精要:从变量到对象,构建稳固基础
  • 软件设计师备考-(十四)数据库设计
  • 驱动——Platform
  • 总结-遇到
  • GD32自学笔记:1.Keil配置GD32环境
  • 【ComfyUI】区域条件控制 图像构图引导
  • 深入解析 Java 的类加载机制
  • docker安装redis(8.2.1)
  • 滑动窗口、哈希表
  • 【CMake】变量作用域2——函数作用域
  • 具身导航“所想即所见”!VISTA:基于生成式视觉想象的视觉语言导航
  • 【攻防实战】浅谈Cobalt Strike远控实战
  • 生命周期方法:didUpdateWidget
  • W25Q128
  • 今日分享:C++ -- list 容器
  • RecSys:用户行为序列建模以及DIN、SIM模型
  • 6.虚拟化历史
  • 象寄AI-专注商业视觉内容的智能生成
  • 【基础-单选】在Stage模型中,模块的配置文件是
  • SQL 实战指南:校园图书管理系统 SQL 设计(借阅 / 归还 / 库存查询实现)——超全项目实战练习
  • AI市场风起云涌,ai浏览器是最佳的落地项目,现在ai市场的ai浏览器竞争加剧,得ai浏览器者得天下!
  • 对接gemini-2.5-flash-image-preview教程
  • C++比较两个字符串
  • redis的数据类型:string
  • --定位--
  • isAssignableFrom() vs instanceof
  • CuTe C++ 简介02,gemm_device cuda kernel 的实现
  • Kernel中的cgroup2介绍
  • c++八股文1
  • ZooKeeper集群的安装与部署