2024-11-08 09:55阅读: 141评论: 0推荐: 0

DearPyGui学习

接上一篇环境配置

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

创建和销毁上下文 (create_context)
创建和显示视区 (create_viewport、show_viewport)
设置和启动DearPyGui (start_dearpygui)

#基本顺序
dpg.create_context()
dpg.create_viewport()
dpg.setup_dearpygui()

dpg.show_viewport()
dpg.start_dearpygui()
dpg.destroy_context()

2.DPG可以分解为 Items, UI Items, Containers三大类

Items:
项目是库中的任何东西(即按钮、注册表、窗口等)。

UI Items:
DPG中具有可视组件(即按钮、列表框、窗口等)的任何项。

Containers:
可以容纳其他物品的物品。(即窗口、组、注册表等)。

3.Item Usage

Items 使用 add_*** 语法添加.

所有Items都必须有一个可由DPG指定或自动生成的tag

tag可以是整数或字符串,用于在创建项后引用该Items。Items在创建时会返回其标签

b0 = dpg.add_button(label="button 0")
b1 = dpg.add_button(tag=100, label="Button 1")

# 自动分配的tag
print(b0) 
# 100
print(b1) 

所有Items都有以下可选参数: label, tag, user_data, and use_internal_label.
tag 是自动生成的,也可以指定
label 用作项的显示名称。
user_data 可以是任何值,并且经常用于回调 。

4.Configuration, State, Info

DPG Items包括 configuration, state and info.
其中的每一个都可以通过其相应的函数进行访问

get_item_configuration
控制其外观和行为的关键字(标签、回调、宽度、高度)

get_item_state
反映其交互的关键字(可见、悬停、点击等)

get_item_info
反映其信息的关键字(item type, children, theme等)

5.Callbacks 与 Values

通过在激活项时指定要运行的函数来赋予项功能,并且DPG中的几乎所有UI项都可以运行回调。
Callbacks最多可以有3个参数,顺序如下:
sender(发送人,一般是自己)、app_data(它们自己的数据,如文件对话框)、user_data(要发送给该函数的任何Python对象)

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 created
    dpg.add_button(label="Apply", callback=button_callback, user_data="Some Data")

    # user data and callback set any time after button has been created
    btn = dpg.add_button(label="Apply 2", )
    dpg.set_item_callback(btn, button_callback)
    dpg.set_item_user_data(btn, "Some Extra User Data")

Item Values
几乎所有的UI项都有一个Values,它可以被访问或设置。
所有具有Values也有default_value参数,它将设置项的初始起始值。
可以使用以下命令访问值 get_value。

6.Item Handlers

Handlers是在项的指定状态更改时提交回调的项。
Handlers可以通过显示或隐藏来激活或停用。

需要将Handlers添加到处理程序注册表(handler registry.)。
处理程序注册表可以绑定到Item。它们可以绑定到多个Item,以避免必须为每个项复制处理程序。

Handlers侦听与特定项相关的状态。
状态(event变更)如下:Activated、Active、Clicked、Deactivated(停用)、Deactivated After Edited、Focus、Hover、Resize、Toggled、Visible
Ps:这些行为类似于QT中的QEvent函数,监听某种事件,并且在监听到后触发某种行为

实列代码如下

def change_text(sender, app_data):
    dpg.set_value("text item", f"Mouse Button ID: {app_data}")

def visible_call(sender, app_data):
    print("I'm visible")

# define handler_registry
with dpg.item_handler_registry(tag="widget handler") as handler:
    dpg.add_item_clicked_handler(callback=change_text) # listen for states
    dpg.add_item_visible_handler(callback=visible_call)

with dpg.window(width=500, height=300):
    dpg.add_text("Click me with any mouse button", tag="text item")
    dpg.add_text("Close window with arrow to change visible state printing to console", tag="text item 2")

# bind item handler registry to item
dpg.bind_item_handler_registry("text item", "widget handler")
dpg.bind_item_handler_registry("text item 2", "widget handler")

设置监听器 with dpg.item_handler_registry(tag="监听器名") as handler:
添加事件 dpg.add_item_…_handler(callback=回调)
绑定监听器 dpg.bind_item_handler_registry("组件tag", "监听器tag")

7.Developer Tools

DPG包括几个内置的可帮助开发和调试应用程序的工具

import dearpygui.dearpygui as dpg

dpg.create_context()

dpg.show_documentation()
dpg.show_style_editor() # 样式编辑器
dpg.show_debug()
dpg.show_about()
dpg.show_metrics() # 实时显示应用程序的性能,与内置的样式编辑器一起显示
dpg.show_font_manager()
dpg.show_item_registry() # 项注册表

dpg.create_viewport(title='Custom Title', width=800, height=600)
dpg.setup_dearpygui()
dpg.show_viewport()
dpg.start_dearpygui()
dpg.destroy_context()

在官方提供的DEMO程序中,包含上述提到的工具(进入DEMO程序的代码在环境配置一节中有提到)

8.字体 样式

dpg默认字体为
字体偏小且不支持中文,如果需要替换,要在工程目录下导入自己的字体,比如"simhei.ttf"为例子

def init_font_and_theme():
    with dpg.font_registry():
        with dpg.font("./Fonts/simhei.ttf", 24, default_font=True, tag="default_font"):
            dpg.add_font_range_hint(dpg.mvFontRangeHint_Default)
            dpg.add_font_range_hint(dpg.mvFontRangeHint_Chinese_Simplified_Common) # 中文
            dpg.add_font_range_hint(dpg.mvFontRangeHint_Chinese_Full)

        with dpg.font("./Fonts/simhei.ttf", 26, default_font=True, tag="log_font"):
            dpg.add_font_range_hint(dpg.mvFontRangeHint_Default)

        with dpg.font("./Fonts/simhei.ttf", 100, default_font=True, tag="param_label_font"):
            dpg.add_font_range_hint(dpg.mvFontRangeHint_Default)

如果要对全局生效,可直接调用dpg.bind_font("default_font") ,后面传定义字体的tag,或者用with...as...起别名
如果对局部生效,可以这么使用dpg.bind_item_font(dpg.last_item(), "log_font"), 先传控件tag,在传字体tag即可

对于样式,原理相同,先定义对应样式

def init_font_and_theme():
    with dpg.theme(tag="button_text_theme"):
        with dpg.theme_component(dpg.mvButton):
            dpg.add_theme_color(dpg.mvThemeCol_ButtonHovered, (51, 51, 51))
            dpg.add_theme_color(dpg.mvThemeCol_ButtonActive, (51, 51, 51))

    with dpg.theme(tag="no_spacing_theme"):
        with dpg.theme_component(dpg.mvAll):
            dpg.add_theme_style(dpg.mvStyleVar_ItemSpacing, x=53, y=0)
            dpg.add_theme_style(dpg.mvStyleVar_FramePadding, x=0, y=8)

    with dpg.theme(tag="combo_theme"):
        with dpg.theme_component(dpg.mvCombo):
            dpg.add_theme_style(dpg.mvStyleVar_FramePadding, x=2, y=11)

样式分几种不同的类型,具体可以看官方文档,在demo工具中也有样式编辑器可以调试
应用样式也同理dpg.bind_item_theme("config_name", "button_text_theme") 先传递控件tag,再传样式tag

参考资料:
官方文档
机翻官方文档
个人笔记
目前实现的组件脚本

本文作者:gonghw403

本文链接:https://www.cnblogs.com/xxghw/p/18530658

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   gonghw403  阅读(141)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 25岁的心里话
点击右上角即可分享
微信分享提示
💬
评论
📌
收藏
💗
关注
👍
推荐
🚀
回顶
收起
  1. 1 天外来物 Joker Xue
天外来物 - Joker Xue
00:00 / 00:00
An audio error has occurred.