Python DearPyGui 常用控件一
菜单栏
菜单栏是一个 GUI 应用中重要的控件,始终显示在窗口顶部,并具有三个主要部分:
- menu_bar —— 主菜单功能区
- menu —— 下拉菜单或子菜单
- add_menu_item —— 可以运行回调或可以操作的项目
菜单可以根据需要嵌套,而且任何控件都可以添加到菜单中,例如下面栗子中的 “控件列表” 菜单。
from dearpygui.core import *
from dearpygui.simple import *add_additional_font('三极中柔宋.ttf', 18, glyph_ranges='chinese_simplified_common')def print_me(sender, data):log_debug(f"菜单项: {sender}")show_logger()with window("Tutorial"):with menu_bar("Main Menu Bar"):with menu("文件"):add_menu_item("保存", callback=print_me)add_menu_item("另存为", callback=print_me)with menu("设置"):add_menu_item("设置项 1", callback=print_me)add_menu_item("设置项 2", callback=print_me)add_menu_item("帮助", callback=print_me)with menu("控件列表"):add_checkbox("选择", callback=print_me)add_button("点击", callback=print_me)add_color_picker4("选择颜色", callback=print_me)start_dearpygui()
目录对话框
通过 select_directory_dialog
来调用目录对话框,而且必须为其提供回调方法。 回调方法返回的 data
参数中将包含 目录路径 和 文件夹路径。通常,目录对话框是由另一个控件(例如下面栗子中的按钮)调用的。
from dearpygui.core import *
from dearpygui.simple import *add_additional_font('三极中柔宋.ttf', 18, glyph_ranges='chinese_simplified_common')def directory_picker(sender, data):select_directory_dialog(callback=apply_selected_directory)def apply_selected_directory(sender, data):log_debug(data)directory = data[0]folder = data[1]set_value("目录", directory)set_value("文件夹", folder)set_value("文件夹路径", f"{directory}\\{folder}")show_logger()with window("Tutorial"):add_button("目录选择器", callback=directory_picker)add_text("目录路径: ")add_same_line()add_label_text("##dir", source="目录", color=[255, 0, 0])add_text("文件夹: ")add_same_line()add_label_text("##folder", source="文件夹", color=[255, 0, 0])add_text("文件夹路径: ")add_same_line()add_label_text("##folderpath", source="文件夹路径", color=[255, 0, 0])start_dearpygui()
文件对话框
通过 open_file_dialog
可以调用文件对话框,同样,必须为其提供回调方法,回调方法返回的 data
参数中将包含 目录路径 和 文件名称。extensions
是文件对话框的可选参数,可以设置对文件扩展名的过滤,控制显示哪些后缀名的文件。
from dearpygui.core import *
from dearpygui.simple import *add_additional_font('三极中柔宋.ttf', 18, glyph_ranges='chinese_simplified_common')def file_picker(sender, data):open_file_dialog(callback=apply_selected_file, extensions=".*,.py")def apply_selected_file(sender, data):log_debug(data)directory = data[0]file = data[1]set_value("目录", directory)set_value("文件", file)set_value("文件路径", f"{directory}\\{file}")show_logger()with window("Tutorial"):add_button("文件选择器", callback=file_picker)add_text("目录路径: ")add_same_line()add_label_text("##filedir", source="目录", color=[255, 0, 0])add_text("文件: ")add_same_line()add_label_text("##file", source="文件", color=[255, 0, 0])add_text("文件路径: ")add_same_line()add_label_text("##filepath", source="文件路径", color=[255, 0, 0])start_dearpygui()
绘制图表
Dear PyGui 具有 simple_plot
(简单绘图)和 plot
(绘图)两个绘图方式,两者都是动态的。simple_plot
(简单绘图)接受列表参数,并基于列表中的数据数据绘制 y轴 数据,可以是折线图或直方图。
from dearpygui.core import *
from dearpygui.simple import *with window("Tutorial"):add_simple_plot("Simpleplot1", value=[0.3, 0.9, 0.5, 0.3], height=300)add_simple_plot("Simpleplot2", value=[0.3, 0.9, 2.5, 8.9], overlay="Overlaying", height=180, histogram=True)start_dearpygui()
而 plot
(绘图)则具有更多的功能,绘图同时使用 x轴 和 y轴 坐标,使用 add_plot
方法创建,然后可以将数据作为线形图或散布图添加,plot
(绘图)的特点有:
- 单击 & 拖动 —— 平移绘图
- 单击 & 拖动轴 —— 在一个方向上平移绘图
- 双击 —— 将绘图缩放并移动到数据区域
- 右键单击 & 拖动 —— 缩放区域
- 双右键单击 —— 打开设置
- Shift + 右键单击 & 拖动 —— 缩放并填充当前轴的区域
- 滚动鼠标滚轮 —— 缩放
- 在轴上滚动鼠标滚轮 —— 仅缩放该轴
- 点击图例 —— 切换图例上的数据集并隐藏
另外,鼠标停留在绘图上时,会出现数值类型的浮动文本。
from dearpygui.core import *
from dearpygui.simple import *
from math import cos, sindef plot_callback(sender, data):clear_plot("Plot")data1 = []for i in range(0, 100):data1.append([3.14 * i / 180, cos(3 * 3.14 * i / 180)])data2 = []for i in range(0, 100):data2.append([3.14 * i / 180, sin(2 * 3.14 * i / 180)])add_line_series("Plot", "Cos", data1, weight=2, color=[0, 0, 255, 100])add_shade_series("Plot", "Cos", data1, weight=2, fill=[255, 0, 0, 100])add_scatter_series("Plot", "Sin", data2, color=[0, 255, 0, 100])with window("Tutorial"):add_button("Plot data", callback=plot_callback)add_plot("Plot", height=-1)start_dearpygui()
通过 set_value
方法可以更改绘图调用的值,使 simple_plot
(简单绘图)实现动态实时绘制。
from dearpygui.core import *
from dearpygui.simple import *
from math import sindef on_render(sender, data):frame_count = get_data("frame_count")frame_count += 1add_data("frame_count", frame_count)plot_data = get_value("plot_data")if len(plot_data) > 100:plot_data.pop(0)plot_data.append(sin(frame_count / 30))set_value("plot_data", plot_data)with window("Tutorial"):add_simple_plot("Simple Plot", source="plot_data", minscale=-1.0, maxscale=1.0, height=300)add_data("frame_count", 0)set_render_callback(on_render)start_dearpygui()
同样的,plot
(绘图)也可以动态实时绘制,举个栗子,我们使用 set_render_callback
设置一个渲染回调实现动态绘制。
from dearpygui.core import *
from dearpygui.simple import *
from math import cosdef plot_callback(sender, data):# 跟踪每一帧frame_count = get_data("frame_count")frame_count += 1add_data("frame_count", frame_count)# 更新 plot_dataplot_data = get_data("plot_data")if len(plot_data) > 2000:frame_count = 0plot_data.clear()plot_data.append([3.14 * frame_count / 180, cos(3 * 3.14 * frame_count / 180)])add_data("plot_data", plot_data)# 绘制新数据clear_plot("Plot")add_line_series("Plot", "Cos", plot_data, weight=2)with window("Tutorial"):add_plot("Plot", height=-1)add_data("plot_data", [])add_data("frame_count", 0)set_render_callback(plot_callback)start_dearpygui()
绘画与画布
Dear PyGui 有一个低级绘图 API,可以用来原始绘画、自定义控件甚至动态绘画。先通过调用 add_drawing
方法开始绘画,再通过调用各种绘画方法来添加笔画。需要注意的是,画布的原点位于左下角。
from dearpygui.core import *
from dearpygui.simple import *with window("Tutorial"):add_drawing("Drawing_1", width=120, height=120)draw_line("Drawing_1", [10, 10], [100, 100], [255, 0, 0, 255], 1)
draw_text("Drawing_1", [16, 16], "Origin", color=[250, 250, 250, 255], size=15)
draw_arrow("Drawing_1", [100, 65], [50, 70], [0, 200, 255], 1, 10)start_dearpygui()
绘画(drawing
)具有可以获取和设置的缩放(origin
)、原点(origin
)和尺寸(size
)属性,缩放(origin
)是 x 和 y 值的乘数,尺寸(size
)以像素为单位。
from dearpygui.core import *
from dearpygui.simple import *with window("Tutorial"):add_drawing("Drawing_1", width=240, height=240)draw_line("Drawing_1", [10, 10], [100, 100], [255, 0, 0, 255], 1)
draw_text("Drawing_1", [16, 16], "Origin", color=[250, 250, 250, 255], size=15)
draw_arrow("Drawing_1", [100, 65], [50, 70], [0, 200, 255], 1, 10)set_drawing_origin("Drawing_1", 15, 15)
set_drawing_scale("Drawing_1", 2, 2)
set_drawing_size("Drawing_1", 250, 250)start_dearpygui()
绘画(drawing
)可以显示的图像类型有 .png、.jpg、.bmp,使用时需掉用 draw_image
以绘制图像。通过 pmin
和 pmax
参数,我们可以将图像绘制到画布上矩形的左上和右下区域,图像会缩放自动缩放以适应指定区域。
使用 uv_min
和 uv_max
参数,我们可以控制图像要绘制到哪个区域的 标量(scalar),默认情况下,uv_min = [0,0]
和 uv_max = [1,1]
将显示整个图像,而 uv_min = [0,0]
和 uv_max = [0.5,0.5]
则仅显示图形的一部分。
from dearpygui.core import *
from dearpygui.simple import *with window("Tutorial"):add_drawing("Drawing_1", width=700, height=700)draw_image("Drawing_1", 'pokemon_PNG146.png', [0, 700], pmax=[200, 500], uv_min=[0, 0], uv_max=[1, 1], tag="image")
draw_image("Drawing_1", 'pokemon_PNG146.png', [0, 600], pmax=[200, 300], uv_min=[0, 0], uv_max=[1, 1])
draw_image("Drawing_1", 'pokemon_PNG146.png', [0, 500], pmax=[200, 100], uv_min=[0, 0], uv_max=[1, 1])
draw_image("Drawing_1", 'pokemon_PNG146.png', [400, 600], pmax=[600, 400], uv_min=[0, 0], uv_max=[0.5, 0.5])
draw_image("Drawing_1", 'pokemon_PNG146.png', [400, 400], pmax=[700, 50], uv_min=[0, 0], uv_max=[3.5, 2.5])start_dearpygui()
尽管我们可以通过清除和重绘整个图来实现图形的动态化,但是 DearPyGui 还提供了一种更有效的方法,要使绘画(drawing
)动态化,应该使用 tag
参数标记要重绘的控件,然后,只要使用相同的标签去调用。这样,我们就能实现仅清除该控件,并将其重新绘制。
from dearpygui.core import *
from dearpygui.simple import *def on_render(sender, data):counter = get_data("counter")counter += 1modifier = get_data("modifier")if counter < 300:modifier += 1elif counter < 600:modifier -= 1else:counter = 0modifier = 2xpos = 15 + modifier * 1.25ypos = 15 + modifier * 1.25color1 = 255 - modifier * .8color3 = 255 - modifier * .3color2 = 255 - modifier * .8radius = 15 + modifier / 2segments = round(35 - modifier / 10)draw_circle("Drawing_1", [xpos, ypos], radius, [color1, color3, color2, 255], segments=segments,tag="circle##dynamic")add_data("counter", counter)add_data("modifier", modifier)add_data("counter", 0)
add_data("modifier", 2)with window("Tutorial"):add_drawing("Drawing_1", width=700, height=700)set_render_callback(on_render)start_dearpygui()
Python DearPyGui 常用控件一相关推荐
- Python DearPyGui 常用控件二
增量时间与内部时钟 Dear PyGui 有一个内置的时钟,用于检查应用程序运行的总时间 get_total_time,该时间以秒为单位.通过 get_delta_time() 方法,我们可以检查渲染 ...
- python 选择文件对话框插件_Python DearPyGui 常用控件一
菜单栏 菜单栏是一个 GUI 应用中重要的控件,始终显示在窗口顶部,并具有三个主要部分: menu_bar -- 主菜单功能区 menu -- 下拉菜单或子菜单 add_menu_item -- 可以 ...
- python entry_tkinter常用控件演示(Entry)
Entry是 tkinter 中比较常用的控件,它通常用来接收字符串的输入,这个控件使得用户可以输入编辑一行文字:如果输入文字过长(超过Entry的可显示宽度),文字便会自动向后滚动,这种情况下没法在 ...
- Python Tkinter 常用控件空间位置摆放
几何管理 Tkinter控件有特定的几何状态管理方法,管理整个控件区域组织,以下是Tkinter公开的几何管理类:包.网格.位置. from Tkinter import*#初始化Tk() myWin ...
- wxpython制作表格界面_[Python] wxPython 菜单栏控件学习总结(原创)
1.总结 1.大体创建过程 1.创建一个 菜单栏 : menuBar = wx.MenuBar() 相当于这个白色地方,没有File这个菜单 2.创建 菜单 : fileMenu = wx.Menu( ...
- [Python] wxPython 基本控件 (转)
转自:http://www.cnblogs.com/wangjian8888/p/6028777.html 一.静态文本控件 wx.StaticText(parent, id, label, pos= ...
- DevExpress Winform 常用控件
前言 DevExpress 控件的功能比较强大,是全球知名控件开发公司,对于开发 B/S 或 C/S 都非常出色,可以实现很炫且功能强大的效果. DevExpress Winform 常用控件是本人在 ...
- wxpython日期控件_[Python] wxPython 基本控件 (转)
wx.StaticText(parent, id, label, pos=wx.DefaultPosition, size=wx.DefaultSize, style=0, name="st ...
- VS2010-MFC(常用控件:静态文本框)
转自:http://www.jizhuomi.com/software/179.html 关于对话框的使用和各种通用对话框的介绍就到此为止,从本节开始将讲解各种常用控件的用法.常用控件主要包括:静态文 ...
最新文章
- Redis运行流程源码解析
- Oracle 登录时错误: ORA-01017: invalid username/password; logon denied
- TJA1050只能RX不能TX
- Python 学习笔记12 类 - 使用类和实例
- When.js 1.8.0 发布,Promises/A 的实现
- [知识图谱实战篇] 六.HTML+D3实现点击节点显示相关属性及属性值
- android UI进阶之实现listview的分页加载
- java xmpp openfire_XMPP协议学习笔记三(Openfire服务器端搭建开发环境)
- SVN Error: “' 'x' isn't in the same repository as 'y' ” during merge (并不在同一个版本库中)...
- springboot 项目maven 打包错误
- Script:收集数据库中用户的角色和表空间等信息
- eclipse二进制编辑器插件
- 为什么建议你开一个电子签名钥匙盘?电信设备进网许可证办理
- 基于深度学习的小目标检测方法的调查和性能评估
- 美国大数据工程师面试指南(建议收藏)
- 推送原理解析 极光推送使用详解
- 怎么登陆163邮箱?163的邮箱有哪些实用技巧?
- #Ubuntu# #机械键盘# 功能键/多媒体键切换无效
- 基于深度学习的中文语音识别系统框架搭建
- Linux 文件的属性