3. 项目用法¶
3.1. 正在创建项目¶
所有物品都必须有一个可由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()
输入项的值通过与其交互来更改。在上面的示例中,将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()
备注
值的类型取决于小部件。(例如)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、处理程序、州轮询