菜单栏

菜单栏是一个 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)是 xy 值的乘数,尺寸(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 以绘制图像。通过 pminpmax 参数,我们可以将图像绘制到画布上矩形的左上和右下区域,图像会缩放自动缩放以适应指定区域。

使用 uv_minuv_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 常用控件一相关推荐

  1. Python DearPyGui 常用控件二

    增量时间与内部时钟 Dear PyGui 有一个内置的时钟,用于检查应用程序运行的总时间 get_total_time,该时间以秒为单位.通过 get_delta_time() 方法,我们可以检查渲染 ...

  2. python 选择文件对话框插件_Python DearPyGui 常用控件一

    菜单栏 菜单栏是一个 GUI 应用中重要的控件,始终显示在窗口顶部,并具有三个主要部分: menu_bar -- 主菜单功能区 menu -- 下拉菜单或子菜单 add_menu_item -- 可以 ...

  3. python entry_tkinter常用控件演示(Entry)

    Entry是 tkinter 中比较常用的控件,它通常用来接收字符串的输入,这个控件使得用户可以输入编辑一行文字:如果输入文字过长(超过Entry的可显示宽度),文字便会自动向后滚动,这种情况下没法在 ...

  4. Python Tkinter 常用控件空间位置摆放

    几何管理 Tkinter控件有特定的几何状态管理方法,管理整个控件区域组织,以下是Tkinter公开的几何管理类:包.网格.位置. from Tkinter import*#初始化Tk() myWin ...

  5. wxpython制作表格界面_[Python] wxPython 菜单栏控件学习总结(原创)

    1.总结 1.大体创建过程 1.创建一个 菜单栏 : menuBar = wx.MenuBar() 相当于这个白色地方,没有File这个菜单 2.创建 菜单 : fileMenu = wx.Menu( ...

  6. [Python] wxPython 基本控件 (转)

    转自:http://www.cnblogs.com/wangjian8888/p/6028777.html 一.静态文本控件 wx.StaticText(parent, id, label, pos= ...

  7. DevExpress Winform 常用控件

    前言 DevExpress 控件的功能比较强大,是全球知名控件开发公司,对于开发 B/S 或 C/S 都非常出色,可以实现很炫且功能强大的效果. DevExpress Winform 常用控件是本人在 ...

  8. wxpython日期控件_[Python] wxPython 基本控件 (转)

    wx.StaticText(parent, id, label, pos=wx.DefaultPosition, size=wx.DefaultSize, style=0, name="st ...

  9. VS2010-MFC(常用控件:静态文本框)

    转自:http://www.jizhuomi.com/software/179.html 关于对话框的使用和各种通用对话框的介绍就到此为止,从本节开始将讲解各种常用控件的用法.常用控件主要包括:静态文 ...

最新文章

  1. Redis运行流程源码解析
  2. Oracle 登录时错误: ORA-01017: invalid username/password; logon denied
  3. TJA1050只能RX不能TX
  4. Python 学习笔记12 类 - 使用类和实例
  5. When.js 1.8.0 发布,Promises/A 的实现
  6. [知识图谱实战篇] 六.HTML+D3实现点击节点显示相关属性及属性值
  7. android UI进阶之实现listview的分页加载
  8. java xmpp openfire_XMPP协议学习笔记三(Openfire服务器端搭建开发环境)
  9. SVN Error: “' 'x' isn't in the same repository as 'y' ” during merge (并不在同一个版本库中)...
  10. springboot 项目maven 打包错误
  11. Script:收集数据库中用户的角色和表空间等信息
  12. eclipse二进制编辑器插件
  13. 为什么建议你开一个电子签名钥匙盘?电信设备进网许可证办理
  14. 基于深度学习的小目标检测方法的调查和性能评估
  15. 美国大数据工程师面试指南(建议收藏)
  16. 推送原理解析 极光推送使用详解
  17. 怎么登陆163邮箱?163的邮箱有哪些实用技巧?
  18. #Ubuntu# #机械键盘# 功能键/多媒体键切换无效
  19. 基于深度学习的中文语音识别系统框架搭建
  20. Linux 文件的属性

热门文章

  1. 编程实现 带符号减法溢出判断
  2. windows修改环境变量
  3. Spring使用IOC容器创建对象及ClassPathXmlApplicationContext与FileSystemXmlApplicationContext接口详解
  4. VMware中linux访问共享文件夹设置流程
  5. 第一个程序python-HelloWorld
  6. myeclipse9.1 安装svn(图)
  7. IT职场人生系列之二十:危险职业(下)
  8. String类中的常用方法
  9. Useful link
  10. NoSQL Redis的学习笔记