美文网首页
Python DearPyGui 常用控件二

Python DearPyGui 常用控件二

作者: 何小有 | 来源:发表于2020-11-05 17:53 被阅读0次

    增量时间与内部时钟

    Dear PyGui 有一个内置的时钟,用于检查应用程序运行的总时间 get_total_time,该时间以秒为单位。通过 get_delta_time() 方法,我们可以检查渲染的每帧之间的时间差,同样是以秒为单位。

    from dearpygui.core import *
    from dearpygui.simple import *
    
    add_additional_font('三极中柔宋.ttf', 18, glyph_ranges='chinese_simplified_common')
    
    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)
    
    with window("Tutorial"):
        add_text("应用运行的总时间: ")
        add_same_line()
        add_label_text("##total_time_text", source="total_time")
        add_text("应用刷新的时间差: ")
        add_same_line()
        add_label_text("##delta_time_text", source="delta_time")
    set_render_callback(callback=on_render)
    
    start_dearpygui()
    
    dearpygui_getdeltatime.png

    精灵(Sprites)

    “精灵(Sprites)” 的概念通常用于游戏开发中,而 DearPyGui 是对 Dear ImGui 游戏类框架的包装,因此, DearPyGui 中也有 精灵 这个概念。从技术上讲,精灵 就是一个可以不断变化的图片,这些变化包括:位置移动、旋转(以自身几何中心或以某个屏幕坐标为轴)、放大缩小、运动(按一定时间间隔连续显示一系列图像,形成运动效果)。

    通过带有 tag 的图像、get_delta_time 和渲染时触发的 set_render_callback 回调方法,我们可以创建一个 精灵角色(Sprite Character),我们会用到下面这张图像:

    SpriteMapExample.png

    再通过 add_drawing 开始绘制,就可以通过具体的绘制方法来添加控件了。同样的,画布的原点位于左下角。

    from dearpygui.core import *
    from dearpygui.simple import *
    
    add_additional_font('三极中柔宋.ttf', 18, glyph_ranges='chinese_simplified_common')
    
    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(500, 500)
    
    with window("Tutorial"):
        add_drawing("Drawing_1", width=120, height=120)
        top_left = [100, 100]
        bottom_right = [50, 50]
        draw_image("Drawing_1", 'SpriteMapExample.png', top_left, pmax=bottom_right, uv_min=[.7687, 0], uv_max=[1, .10],
                   tag="sprite")
        add_text("飞行模式:")
        add_radio_button("Fly Mode", items=["禁用", "启用"], default_value=0)
        add_slider_float("Draw Pause", label="快~慢", default_value=0.1, min_value=0.0, max_value=1.0,
                         tip="通过等待 Elapsed Time 来降低绘制速度", format="%.4f")
        set_render_callback(on_render)
        add_data("delta_draw_time", 0.0)
        add_data("sprite1", True)
    
    start_dearpygui()
    
    dearpygui_spritemap.png

    表格

    Dear PyGui 有一个调用简单的表格 API,可以实现静态和动态的表格。先通过调用 add_table() 方法以启动表格控件,然后如果要编辑表格,可以使用 add_row()add_column() 方法将行/列追加到表格的最后。

    另外,还可以使用 insert_rowinsert_column 方法插入行/列,列和行根据其 ***_index 参数插入,如果指定的 ***_index 参数已经存在,则会采取覆盖操作。默认情况下,添加或插入的行/列将用空值填充单元格。

    from dearpygui.core import *
    from dearpygui.simple import *
    
    add_additional_font('三极中柔宋.ttf', 18, glyph_ranges='chinese_simplified_common')
    
    with window("Tutorial"):
        add_table("Table Example", ["标题 0", "标题 1"])
        add_row("Table Example", ["行 0", "文本内容"])
        add_row("Table Example", ["行 2", "文本内容"])
        add_column("Table Example", "标题 3", [{'a': 1}, {'b': 2}])
        insert_row("Table Example", 1, ["行 1", "插入行", "插入行"])
        insert_column("Table Example", 2, "标题 2", ["插入列", "插入列", "插入列"])
    
    start_dearpygui()
    
    dearpygui_addtable.png

    此外,标题和单元格可以重命名/更改。

    from dearpygui.core import *
    from dearpygui.simple import *
    
    add_additional_font('三极中柔宋.ttf', 18, glyph_ranges='chinese_simplified_common')
    
    def modify_tables(sender, data):
        log_debug(f"表格名称: {sender}")
        coord_list = get_table_selections("Table Example")
        log_debug(f"选中的单元格 (坐标): {coord_list}")
        for coordinates in coord_list:
            set_table_item("Table Example", coordinates[0], coordinates[1], "新值")
        set_headers("Table Example", ["新标题 0", "新标题 1", "新标题 2"])
    
    show_logger()
    
    with window("Tutorial"):
        add_spacing(count=5)
        add_button("修改选定的表值", callback=modify_tables)
        add_spacing(count=5)
        add_table("Table Example", ["标题 0", "标题 1"])
        add_row("Table Example", ["文本内容", "文本内容"])
        add_row("Table Example", ["文本内容", "文本内容"])
        add_column("Table Example", "标题 2", ["文本内容", "文本内容"])
        add_row("Table Example", ["文本内容"])
    
    start_dearpygui()
    
    dearpygui_settableitem.png

    上面的两个栗子中,表格的单元格是可选的,这意味着我们可以将回调方法应用于表格,并获取单元格中的内容。

    from dearpygui.core import *
    from dearpygui.simple import *
    
    add_additional_font('三极中柔宋.ttf', 18, glyph_ranges='chinese_simplified_common')
    
    def table_printer(sender, data):
        log_debug(f"表格名称: {sender}")
        coord_list = get_table_selections("Table Example")
        log_debug(f"选中的单元格 (坐标): {coord_list}")
        names = []
        for coordinates in coord_list:
            names.append(get_table_item("Table Example", coordinates[0], coordinates[1]))
        log_debug(names)
    
    show_logger()
    
    with window("Tutorial"):
        add_table("Table Example", ["标题 0", "标题 1"], callback=table_printer)
        add_row("Table Example", ["文本内容", "文本内容"])
        add_row("Table Example", ["文本内容", "文本内容"])
        add_column("Table Example", "标题 3", ["文本内容", "文本内容"])
        add_row("Table Example", ["文本内容"])
    
    start_dearpygui()
    
    dearpygui_tableitemcallback.png

    相关文章

      网友评论

          本文标题:Python DearPyGui 常用控件二

          本文链接:https://www.haomeiwen.com/subject/qdkavktx.html