Python DearPyGui 基础

Dear PyGui 库用于开发跨平台的 GUI 应用程序,于2020年9月发布,通过对 Dear ImGui 的包装,使它与众不同(相比其他的 Python GUI 框架)。DearPyGui 在后台使用 C++ 的 Bloat-free 立即模式图形用户界面,能够实现灵活的动态界面。而且,DearPyGui 不使用系统平台的窗口控件,而是使用计算机的显卡来绘制窗口控件,因此能支持所有系统平台。

先确保你的 Python 版本在 3.7 以上,再通过 pip install dearpygui 命令下载 DearPyGui 库。

第一份代码

dearpygui_hellodearpygui.png
from dearpygui.core import *
from dearpygui.simple import *

def save_callback(sender, data):
    print("保存点击")

with window("Example Window"):
    add_text("Hello, Dear PyGui")
    add_button("Save", callback=save_callback)
    add_input_text("string", default_value="Quick brown fox")
    add_slider_float("float", default_value=0.283, max_value=1)

start_dearpygui()

窗口结构

相比于其他 Python GUI 框架,使用 DearPyGui 非常简单,比如通过 show_documentation() 方法可以查看文档,不过要注意,DearPyGui 项目的代码最终必须以 start_dearpygui() 方法结束。

from dearpygui.core import *
from dearpygui.simple import *

show_documentation()

start_dearpygui()
dearpygui_showdocumentation.png

一个 DearPyGui 应用程序由 可视区域(viewport)窗口(windows)控件(widgets) 组成,可视区域(viewport) 是应用程序的主窗口,通过调用 start_dearpygui() 方法创建。下面通过 show_about() 方法打开 “关于” 窗口,以演示 可视区域(viewport)窗口(windows) 之间的关系。

from dearpygui.core import *
from dearpygui.simple import *

show_documentation()
show_about()

start_dearpygui()
dearpygui_showabout.png

Dear PyGui 由 dearpygui.coredearpygui.simple 两个包组成。dearpygui.core 包含 DearPyGui 的核心功能,其他所有的功能都建立在它之上;dearpygui.simple 包含一些简单的封装和基于 dearpygui.core 创建的实用功能,提供了更为简单、友好的调用方式。

开发者工具

Dear PyGui 包含常用的开发人员工具,下面会打开 Debug 窗口、Logger 窗口和 Metrics 窗口。

from dearpygui.core import *
from dearpygui.simple import *

show_debug()
show_metrics()
show_logger()

start_dearpygui()
dearpygui_showdebug.png

内置日志记录

日志记录 Logger 是内置开发者工具之一,可以通过命令 show_logger()方法访问,Logger6 个日志级别:

  • Trace —— 低级的日志
  • Debug —— 开发过程中的细粒度日志
  • Info —— 感兴趣或重要的粗粒度日志
  • Warning —— 潜在错误或提示信息
  • Error —— 错误和异常信息
  • Off —— 关闭所有日志记录

可以结合下面的栗子来理解 6 个日志级别的区别。

from dearpygui.core import *

show_logger()
set_log_level(mvTRACE)
log("Trace Message")
log_debug("Debug Message")
log_info("Info Message")
log_warning("Warning Message")
log_error("Error Message")

start_dearpygui()
dearpygui_showlogger.png

控件与窗口

通常,控件在添加时都需要使用对应的 add_*** 方法,同时也必须有一个唯一的 name,默认情况下,name 会被当成 label 使用(视具体控件而定),因此,如果我们要改变 label,可以通过下面两种方式:

  • 使用 ## 进行字符拼接,左边的字符串为要显示的名称,右边则为隐藏名称
  • 通过设置 label 参数的值,显式设置要显示的名称

还有一些控件(下面以 same_line 为栗)是自动生成 name 的,在这些控件方法中,name 是可选参数,如果我们需要在以后引用这个控件,就可以填写这个 name 参数。

from dearpygui.core import *
from dearpygui.simple import *

with window("Tutorial"):
    add_button("Apply")
    add_same_line(spacing=10)
    add_button("Apply##1")
    add_same_line(spacing=10, name="sameline1")
    add_button("Apply2", label="Apply")
    add_spacing(count=5, name="spacing1")
    add_button("Apply##3")

start_dearpygui()
dearpygui_namelabel.png

Dear PyGui 的容器即 窗口(windows) 用于保存控件,创建方法如下:

  • add_window() 方法启动窗口并在结束调 end() 方法
  • 使用 dearpygui.simple 包和相应的窗口管理器(推荐)

dearpygui.simple 中相应的窗口上下文管理器将自动调用 end() 方法,这样代码就可以折叠起来,便于管理代码的层次结构。

from dearpygui.core import *

add_window("Tutorial")
add_text("This is some text on window 1")
end()

from dearpygui.simple import *

with window("Tutorial##2"):
    add_text("This is some text on window 2")

start_dearpygui()
dearpygui_addwindow.png

理论上,窗口和控件是按代码顺序来创建,但是,在 DearPyGui 中,我们可以通过指定 parent 参数来按一定规则添加窗口或控件。使用 parent 参数将在父级窗口或控件的末尾插入控件,如果要将其插入到其他位置,可以将 beforeparent 参数结合使用,这样可以将控件放在另一个控件的前面。

from dearpygui.core import *
from dearpygui.simple import *

add_additional_font('汉仪荆戟.ttf', 18, glyph_ranges='chinese_simplified_common')

with window('Tutorial'):
    add_text('首先创建的控件')
    # 我们可以在创建父对象之前就提前指定它,例如这里的 window 2 和 child 1
    add_text('这是 window 2 上的一些文本', parent='window 2')
    add_text('这是 child 1 上的一些文本', parent='child 1')

with window('window 1'):
    with child('child 1'):
        # 在 child 内部添加一个输入项
        add_checkbox('Checkbox', label='复选框')

add_checkbox('最后创建的控件', parent="MainWindow", before='首先创建的控件')
add_checkbox('最后创建的控件-2', parent="child 1", before="Checkbox")

add_window('window 2')
end()

# 空窗口
with window('window 3'):
    pass

start_dearpygui()
dearpygui_beforeparent.png

主窗口

可以通过使用 start_dearpygui 方法的 primary_window 参数或使用 set_primary_window 方法将一个窗口设置为主窗口。

from dearpygui.core import *
from dearpygui.simple import *

with window("Tutorial"):
    add_checkbox("Radio Button", default_value=False)
    print("单选按钮的值为: ", get_value("Radio Button"))
    set_value("Radio Button", True)
    print("设置新值后,单选按钮的值为: ", get_value("Radio Button"))

start_dearpygui(primary_window="Tutorial")
dearpygui_primarywindow.png

每个输入窗口控件都有一个 value,可以在创建时使用 default_value 参数或在运行时通过 set_value 方法进行设置。同时,可以使用 get_value 方法访问控件的 value

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 207,113评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,644评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 153,340评论 0 344
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,449评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,445评论 5 374
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,166评论 1 284
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,442评论 3 401
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,105评论 0 261
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,601评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,066评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,161评论 1 334
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,792评论 4 323
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,351评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,352评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,584评论 1 261
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,618评论 2 355
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,916评论 2 344