本章重点回顾一下“回调”,同时简单介绍几个常用的东西。不啰嗦,开始。
需求:做一个“丑陋”的登录界面,并实现基本功能
一、上图
image.png
image.png
二、代码-界面(添加组件、调整属性)
with dpg.window(label='Login', width=195, height=200, pos=(20, 20), tag='win'):
dpg.add_text(default_value=' 登 录 ', color=(10, 200, 120))
dpg.add_input_text(tag='user', hint='请输入用户名', width=180)
dpg.add_input_text(tag='psw', hint='请输入密码', width=180, password=True)
dpg.add_separator()
dpg.add_button(label='登 录', tag='login', width=dpg.get_item_width('user'))
dpg.add_text(default_value='请输入用户名和密码', color=(10, 200, 120), tag='show_info')
简单说两个地方:
1、dpg.get_item_width()
获取控件的长度。DearPyGui提供了很多获取功能。只要输入dpg.get_,然后根据代码补全提示大家可以自行去逐个测试。
2、组件的先后顺序
代码是自上而下执行,也就是说input_text组件先生成,button组件后生成。因此在button组件中能获得input_text组件的宽度。反过来呢?自己试试。
三、代码-回调函数
# button的回调函数
def button_click():
user = dpg.get_value('user')
psw = dpg.get_value('psw')
if len(user) == 0 or len(psw) == 0:
dpg.set_value('show_info', '请输入用户名或密码')
dpg.configure_item('show_info', color=(255, 0, 0))
elif user != '张三' or psw != '123456':
dpg.set_value('show_info', '用户名或密码错误')
dpg.configure_item('show_info', color=(255, 0, 0))
else:
dpg.set_value('show_info', user + '登录成功')
dpg.configure_item('show_info', color=(10, 200, 120))
# 窗体
with dpg.window(label='Login', width=195, height=200, pos=(20, 20), tag='win'):
dpg.add_text(default_value=' 登 录 ', color=(10, 200, 120))
dpg.add_input_text(tag='user', hint='请输入用户名', width=180)
dpg.add_input_text(tag='psw', hint='请输入密码', width=180, password=True)
dpg.add_separator()
# 增加button,并通过callback来调用回调函数
dpg.add_button(label='登 录', tag='login', width=dpg.get_item_width('user'), callback=button_click)
dpg.add_text(default_value='请输入用户名和密码', color=(10, 200, 120), tag='show_info')
DearPyGui的组件,通过callback=,来调用回调函数。在上面代码中,我们就给button组件增加了一个回调函数,并通过回调函数来实现相应的功能。
当然,一个回调函数,也可以供多个组件使用。
例如,我们给input_text组件也调用同一个回调函数:
# button的回调函数(text组件也可以调用)
def button_click():
user = dpg.get_value('user')
psw = dpg.get_value('psw')
if len(user) == 0 or len(psw) == 0:
dpg.set_value('show_info', '请输入用户名或密码')
dpg.configure_item('show_info', color=(255, 0, 0))
elif user != '张三' or psw != '123456':
dpg.set_value('show_info', '用户名或密码错误')
dpg.configure_item('show_info', color=(255, 0, 0))
else:
dpg.set_value('show_info', user + '登录成功')
dpg.configure_item('show_info', color=(10, 200, 120))
# 窗体
with dpg.window(label='Login', width=195, height=200, pos=(20, 20), tag='win'):
dpg.add_text(default_value=' 登 录 ', color=(10, 200, 120))
# text组件也可以调用回调函数
dpg.add_input_text(tag='user', hint='请输入用户名', width=180, callback=button_click)
dpg.add_input_text(tag='psw', hint='请输入密码', width=180, password=True, callback=button_click)
dpg.add_separator()
# 增加button,并通过callback来调用回调函数
dpg.add_button(label='登 录', tag='login', width=dpg.get_item_width('user'), callback=button_click)
dpg.add_text(default_value='请输入用户名和密码', color=(10, 200, 120), tag='show_info')
还不赶紧试试效果?
四、常用的东西
在DearPyGui中,以下东西经常用:
1、dpg.add:增加组件
2、dpg.get:获取组件的属性
3、dpg.set:设置组件的属性
4、dpg.configure_item:设置组件的属性(说实话,没理解为啥不与dpg.set合并到一起)
读者可以逐个试试这4个东西(希望你的IDE有自动补全功能)