3. 项目用法

3.1. 正在创建项目

项是使用其 *add_* ** *命令。

所有物品都必须有一个可由DPG指定或自动生成的标签。

Tags 可以是整数或字符串,用于在创建项后引用该项。

项目在创建时会返回其标签。

警告

属性指定的项标记必须是唯一的 tag 关键词。整数0-10保留用于DPG内部项目。

import dearpygui.dearpygui as dpg

dpg.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()

备注

可以在运行时创建和删除项(请参阅 项目创建

参见

有关创建项目的详细信息,请执行以下操作:

3.2. 创建容器

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

import dearpygui.dearpygui as dpg

dpg.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()

参见

有关容器的详细信息,请执行以下操作:

3.3. 配置、状态、信息

DPG项包括配置、状态和信息。(和价值,但我们将另行介绍)

其中的每一个都可以通过其相应的函数进行访问

get_item_configuration

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

get_item_state

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

get_item_info

反映其信息的关键字(项目类型、子项、主题等)

备注

配置、状态和信息被分解为单独的命令,这些命令访问每个单独的关键字,而不是返回整个词典。

示例:
get_item_label
is_item_hovered
get_item_children

下面,我们将演示配置项目的方法,以及如何通过项目注册工具查看项目来检查其状态。

代码:

import dearpygui.dearpygui as dpg

dpg.create_context()

with dpg.window(label="Tutorial"):

    # configuration set when button is created
    dpg.add_button(label="Apply", width=300)

    # user data and callback set any time after button has been created
    btn = dpg.add_button(label="Apply 2")
    dpg.set_item_label(btn, "Button 57")
    dpg.set_item_width(btn, 200)

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()

参见

有关以下主题的更多信息:

3.4. 回调

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

函数或方法在创建项时或在以后的运行时分配为UI项回调 set_item_callback

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

发件人:

这个 id 提交回调的UI项的

APP_DATA:

有时,UI项会发送它们自己的数据(例如文件对话框)

用户数据(_D):

要发送给该函数的任何Python对象

备注

因为它们是可选的位置参数,所以必须使用 发件人app_data 如果您想使用 user_data 标准关键字参数

代码:

import dearpygui.dearpygui as dpg

dpg.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 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")

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

参见

有关项目回调的更多信息 项目回调

3.5. 项目价值

几乎所有的UI项都有一个 价值 它可以被访问或设置。

所有具有 价值 也有 default_value 参数,它将设置项的初始起始值。

可以使用以下命令访问值 get_value

下面是设置 default_value 对于两个不同的项,设置对项的回调并打印它们的值。

import dearpygui.dearpygui as dpg

dpg.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()
https://raw.githubusercontent.com/Atlamillias/DearPyGui-Stuff/main/wiki%20images/dpg_using_widgets_ex1.png

输入项的值通过与其交互来更改。在上面的示例中,将SLIDER_FLOAT1滑块移动到30.55会将其‘值设置为30.55。

我们可以通过在运行时使用更改项的值来设置滑块的位置 set_value

import dearpygui.dearpygui as dpg

dpg.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()
https://raw.githubusercontent.com/Atlamillias/DearPyGui-Stuff/main/wiki%20images/dpg_using_widgets_ex2.png

备注

值的类型取决于小部件。(例如)INPUT_INT缺省值需要为整数。

参见

有关项值的详细信息,请参阅

3.6. 使用项处理程序

UI项处理程序侦听与UI项相关的事件(状态更改),然后提交回调。

import dearpygui.dearpygui as dpg

dpg.create_context()

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

with dpg.window(width=500, height=300):
    dpg.add_text("Click me with any mouse button", tag="text item")
    with dpg.item_handler_registry(tag="widget handler") as handler:
        dpg.add_item_clicked_handler(callback=change_text)
    dpg.bind_item_handler_registry("text item", "widget handler")

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

参见

有关项处理程序的更多信息 IO、处理程序、州轮询