DearPyGui 教程(四)


(注:由于DearPyGui正处于快速迭代期,功能日兴月易,本文所描述的内容很有可能已经过时,如需了解最新信息,请至源文链接:https://hoffstadt.github.io/DearPyGui/tutorial.html)

本教程旨在演示如何使用DearPyGui的一部分特性,并未覆盖DearPyGui的全部功能,更多复杂功能的示例可以在GitHub上的示例文件夹中看到. 有关特定API的信息建议参考 API Reference.

Delta Time 和 内部时钟

DearPyGui有一个内置的时钟来检查总运行时间, 使用 get_total_time() 可以获取以秒为单位的总运行时间。
还可以使用命令 get_delta_time() 获取渲染帧之间的时间(以秒为单位)。

from dearpygui.core import *


def on_render(sender, data):
    delta_time = str(round(get_delta_time(), 4))
    total_time = str(round(get_total_time(), 4))
    set_value("delta_time", delta_time)
    set_value("total_time", total_time)


add_text("Total Time: ")
add_same_line()
add_label_text("##total_time_text", source="total_time")
add_text("Delta Time: ")
add_same_line()
add_label_text("##delta_time_text", source="delta_time")
set_render_callback(callback=on_render)

start_dearpygui()

Sprite(精灵)

我们可以用带有标签、get_delta_time() 和回调的drawing绘图创建一个精灵符号(sprite character)。 下面的示例,我们需要从GitHub上的示例文件夹下载图片 SpriteMapExample.png,并将其放置在你的python文件所在的同级目录中。(有关sprite 和 image的区别可以参考[这里])
绘图是通过调用 add_drawing() 来启动的,然后就可以通过相应的绘图命令来添加各个项。 画布的原点在左下角。

from dearpygui.core import *


def on_render(sender, data):
    delta_draw_time = get_data("delta_draw_time")
    draw_speed = get_value("Draw Pause")

    if delta_draw_time > draw_speed:
        if get_value("Fly Mode") == 0:
            if get_data("sprite1"):
                draw_image("Drawing_1", 'SpriteMapExample.png', top_left, pmax=bottom_right, uv_min=[.7690, 0],
                           uv_max=[.8074, .10], tag="sprite")
                add_data("sprite1", False)
            else:
                draw_image("Drawing_1", 'SpriteMapExample.png', top_left, pmax=bottom_right, uv_min=[.8074, 0],
                           uv_max=[.8461, .10], tag="sprite")
                add_data("sprite1", True)
        else:
            if get_data("sprite1"):
                draw_image("Drawing_1", 'SpriteMapExample.png', top_left, pmax=bottom_right, uv_min=[.8464, 0],
                           uv_max=[.8848, .10], tag="sprite")
                add_data("sprite1", False)
            else:
                draw_image("Drawing_1", 'SpriteMapExample.png', top_left, pmax=bottom_right, uv_min=[.8851, 0],
                           uv_max=[.9235, .10], tag="sprite")
                add_data("sprite1", True)
        add_data("delta_draw_time", 0)
    else:
        add_data("delta_draw_time", delta_draw_time + get_delta_time())

set_main_window_size(650, 800)
add_drawing("Drawing_1", width=500, height=500)
top_left = [250, 250]
bottom_right = [300, 300]
draw_image("Drawing_1", 'SpriteMapExample.png', top_left, pmax=bottom_right, uv_min=[.7687, 0], uv_max=[1, .10], tag="sprite")
add_text("Fly Mode:")
add_radio_button("Fly Mode", items=["Disable", "Enable"], default_value=0)
add_slider_float("Draw Pause", default_value=0.1, min_value=0.0, max_value=0.5, tip="slows down draws by waiting until the elapsed time", format="%.4f")
set_render_callback(on_render)
add_data("delta_draw_time", 0.0)
add_data("sprite1", True)

start_dearpygui()

Table(表)

DearPyGui有一个低级别的table API,非常适合静态和动态表。
table 小部件通过 add_table() 来调用。
要编辑table 小部件,我们可以使用 add_row() add_column() 将行/列附加到表的最后。
也可以用 insert_row() insert_column() 插入行/列。 列和行插入的位置根据 index 索引参数决定。 如果指定索引位置已经存在行/列,则已有的行/列将被挤到后面,并在指定的索引位置处插入新的行/列。此外,添加或插入的行/列默认情况下将用空单元格填充未指定的单元格。

from dearpygui.core import *

add_table("Table Example", ["Header 0", "Header 1"])
add_row("Table Example", ["row 0", "text"])
add_row("Table Example", ["row 2", "text"])
add_column("Table Example", "Header 3", ["data","data"])
insert_row("Table Example", 1, ["row 1", "inserted row", "inserted row"])
insert_column("Table Example", 2, "Header 2", ["inserted with column", "inserted column", "inserted column"])

start_dearpygui()

效果:
Table表
此外,可以重命名标题和单元格,并更改它们的值

from dearpygui.core import *


def modify_tables(sender, data):
    log_debug(f"Table Called: {sender}")
    coord_list = get_table_selections("Table Example")
    log_debug(f"Selected Cells (coordinates): {coord_list}")
    for coordinates in coord_list:
        set_table_item("Table Example", coordinates[0], coordinates[1], "New Value")
    set_headers("Table Example", ["New Header 0", "New Header 1", "New Header 2"])


show_logger()
add_spacing(count=5)
add_button("Modify Selected Table Values", callback=modify_tables)
add_spacing(count=5)
add_table("Table Example", ["Header 0", "Header 1"])
add_row("Table Example", ["awesome row", "text"])
add_row("Table Example", ["super unique", "unique text"])
add_column("Table Example", "Header 2", ["text from column", "text from column"])
add_row("Table Example", ["boring row"])

start_dearpygui()

表的单元格是可以被选中的, 这意味着我们可以通过回调获取到哪个单元格被选中,甚至获取单元格中的文本。

from dearpygui.core import *


def table_printer(sender, data):
    log_debug(f"Table Called: {sender}")
    coord_list = get_table_selections("Table Example")
    log_debug(f"Selected Cells (coordinates): {coord_list}")
    names = []
    for coordinates in coord_list:
        names.append(get_table_item("Table Example", coordinates[0], coordinates[1]))
    log_debug(names)


show_logger()
add_table("Table Example", ["Header 0", "Header 1"], callback=table_printer)
add_row("Table Example", ["awesome row", "text"])
add_row("Table Example", ["super unique", "unique text"])
add_column("Table Example", "Header 3", ["text from column", "text from column"])
add_row("Table Example", ["boring row"])

start_dearpygui()
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值