Python DearPyGui 常用控件一

Python012

Python DearPyGui 常用控件一,第1张

菜单栏是一个 GUI 应用中重要的控件,始终显示在窗口顶部,并具有三个主要部分:

菜单可以根据需要嵌套,而且任何控件都可以添加到菜单中,例如下面栗子中的 “控件列表” 菜单。

通过 select_directory_dialog 来调用目录对话框,而且必须为其提供回调方法。 回调方法返回的 data 参数中将包含 目录路径 文件夹路径 。通常,目录对话框是由另一个控件(例如下面栗子中的按钮)调用的。

通过 open_file_dialog 可以调用文件对话框,同样,必须为其提供回调方法,回调方法返回的 data 参数中将包含 目录路径 文件名称 。 extensions 是文件对话框的可选参数,可以设置对文件扩展名的过滤,控制显示哪些后缀名的文件。

Dear PyGui 具有 simple_plot (简单绘图)和 plot (绘图)两个绘图方式,两者都是动态的。 simple_plot (简单绘图)接受列表参数,并基于列表中的数据数据绘制 y轴 数据,可以是折线图或直方图。

而 plot (绘图)则具有更多的功能,绘图同时使用 x轴 和 y轴 坐标,使用 add_plot 方法创建,然后可以将数据作为线形图或散布图添加, plot (绘图)的特点有:

另外,鼠标停留在绘图上时,会出现数值类型的浮动文本。

通过 set_value 方法可以更改绘图调用的值,使 simple_plot (简单绘图)实现动态实时绘制。

同样的, plot (绘图)也可以动态实时绘制,举个栗子,我们使用 set_render_callback 设置一个渲染回调实现动态绘制。

Dear PyGui 有一个低级绘图 API,可以用来原始绘画、自定义控件甚至动态绘画。先通过调用 add_drawing 方法开始绘画,再通过调用各种绘画方法来添加笔画。需要注意的是,画布的原点位于左下角。

绘画( drawing )具有可以获取和设置的缩放( origin )、原点( origin )和尺寸( size )属性,缩放( origin )是 x 和 y 值的乘数,尺寸( size )以像素为单位。

绘画( 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] 则仅显示图形的一部分。

尽管我们可以通过清除和重绘整个图来实现图形的动态化,但是 DearPyGui 还提供了一种更有效的方法,要使绘画( drawing )动态化,应该使用 tag 参数标记要重绘的控件,然后,只要使用相同的标签去调用。这样,我们就能实现仅清除该控件,并将其重新绘制。

import tkinter

win=tkinter.Tk()

win.title('第一个窗口')

win.geometry()

'''

Listbox 列表框控件:可以包含一个或者多个文本框

作业:在listbox控件的小窗口显示一个字符串

'''

#一:【支持鼠标移动选中位置】使用selectmode=tkinter.BROWSE,创建一个listbox,添加几个元素

'''

lb=tkinter.Listbox(win,selectmode=tkinter.BROWSE)

lb.pack()

for item in ['good','nice','beautiful']:

#1:添加

#按顺序添加(向后添加)

    lb.insert(tkinter.END,item) 

#在开始添加(往前添加)

lb.insert(tkinter.ACTIVE,'cool') 

#将列表当成一个元素添加

#lb.insert(tkinter.END,['cool','sunk']) 

'''

#2:删除【索引从0开始数】(删除开始索引到结束索引的所有元素),参数1为开始索引,参数2为结束索引,如果不指定参数2,只删除第一个索引的内容

#lb.delete(1)

#3:选中【索引从0开始数】(选中开始索引到结束索引的所有元素),参数1为开始索引,参数2为结束索引,如果不指定参数2,只选中第一个索引的内容

#lb.select_set(2)

#lb.select_set(2,4)

#4:取消选中【索引从0开始数】(取消选中开始索引到结束索引的所有元素),参数1为开始索引,参数2为结束索引,如果不指定参数2,只取消选中第一个索引的内容

#lb.select_clear(2)

#5:获取到列表中的元素个数

#print(lb.size())

#6:从列表中取值【索引从0开始数】(获取选中开始索引到结束索引的所有元素的值(tuple)),参数1为开始索引,参数2为结束索引,如果不指定参数2,只获取第一个索引的内容

#print(lb.get(1,2))

#7:返回当前选中的索引项(得到索引),不是的到内容

#print(lb.curselection())

#8:判断 一个选项是否被选中,返回布尔类型 用索引表示 

#print(lb.select_includes(1))

#9:绑定变量

#lbv=tkinter.StringVar()

#   9.1 打印当前列表中的所有选项(tuple)

#print(lbv.get())

#   9.2 设置选项(tuple)

#lbv.set(('1','2'))

#10:绑定事件(需要一个参数,但是不要传)

'''

def myPrint(event):

    print(lb.get(lb.curselection()))

lb.bind('<Double-Button-1>',myPrint)

#11:滚动条

sc=tkinter.Scrollbar(win)

sc.pack(side=tkinter.RIGHT,fill=tkinter.Y)

lb.pack(side=tkinter.LEFT,fill=tkinter.BOTH)

#关联

lb.configure(yscrollcommand=sc.set)  (config方法也可以)

sc['command']=lb.yview #额外给属性赋值,相当于 sc.configure(command=text.yview)

'''

'''#二:【不支持鼠标移动选中位置,支持鼠标按下后选中位置】使用selectmode=tkinter.SINGLE,创建一个listbox,添加几个元素,与(一)相似

lb=tkinter.Listbox(win,selectmode=tkinter.SINGLE,listvariable=lbv)

lb.pack()

for item in ['good','nice','beautiful']:

    lb.insert(tkinter.END,item)

'''

#三:【在一的功能上,可以使listbox支持shift和control(实现连选与多选)】使用selectmode=tkinter.EXTENDED

'''

lb=tkinter.Listbox(win,selectmode=tkinter.EXTENDED)

for item in ['good','nice','beautiful','good1','nice1','beautiful1','good2','nice2','beautiful2','good3','nice3','beautiful3']:

    lb.insert(tkinter.END,item)

sc=tkinter.Scrollbar(win)

sc.pack(side=tkinter.RIGHT,fill=tkinter.Y)

lb.configure(yscrollcommand=sc.set)

lb.pack(side=tkinter.LEFT,fill=tkinter.BOTH)

sc['command']=lb.yview

'''

#四:【在二的功能上,支持多选】使用selectmode=tkinter.MULTIPLE

lb=tkinter.Listbox(win,selectmode=tkinter.MULTIPLE)

for item in ['good','nice','beautiful','good1','nice1','beautiful1','good2','nice2','beautiful2','good3','nice3','beautiful3']:

    lb.insert(tkinter.END,item)

lb.pack()

win.mainloop()