0x01 创建控制面板、按钮及绘制提示
前言
MYScrcpy Github / Gitee
从 1.6.4 版本开始,为童鞋们提供了一个开放的插件开发环境。
上一章介绍了如何创建一个插件,本章主要讲解DPGExtension类、方法及如何创建一个控制面板、显示面板,添加按钮及绘制提示信息。
注意
插件用于功能测试及教学目的,切勿违法违规使用!
我们开始吧
DPGExtension及抽象方法
myscrcpy.gui.dpg.dpg_extension/DPGExtension
类继承于myscrcpy/core/extension/Extension
,部分方法采用回调形式,由GUI主进程根据设备连接状态及运行状态进行回调。
作为抽象类,Extension有以下4个抽象方法
def start(self):
"""
GUI启动绘制时,回调该方法
"""
...
def device_connect(self, adv_device: AdvDevice, session: Session):
"""
设备连接并创建Session后,
回调该方法,传入设备实例 adv_device及
连接Session实例 session
"""
...
def device_disconnect(self):
"""
设备断开连接后,回调该方法
"""
...
def stop(self):
"""
GUI停止插件时,回调该方法
"""
类方法
MYScrcpy包含许多方法
创建控制面板及按钮
作为示例,本节我们新建一个按钮,并在主界面显示文字提示。
- 新增一个
draw
方法,用于绘制控制面板及按钮
class DDZExtension(DPGExtension):
...
def draw(self):
...
- 调用
register_pad()
方法,注册一个控制面板空间。(此处需要一点点dearpygui知识,参看Dearpygui,不懂也没关系,我尽量在教程中教会大家)
def draw(self):
# 注册左侧控制面板空间,空间ID为 self.tag_pad
# 注意,一个插件只有一个唯一控制面板空间
self.register_pad()
- 导入dearpygui包
import dearpygui.dearpygui as dpg
创建一个dpg.Group,用于存放GUI组件,同时在Group中创建按钮
# 指定group parent 为刚刚注册的pad空间,即 self.tag_pad
with dpg.group(parent=self.tag_pad):
# 在group中创建按钮
dpg.add_button(label='显示信息')
- 添加draw方法至self.start()方法中,这样在GUI加载插件时,会调用draw()方法,绘制控件。
class DDZExtension(DPGExtension):
def start(self):
self.draw()
- 运行myscrcpy,查看效果
点击插件控制面板开关按钮
可以看到已经申请到控制面板空间,并绘制按钮控件
回调方法及绘制信息
- 回到draw方法,申请绘制页面
def draw(self):
...
# 申请绘制页面,保存页面ID
self.tag_layer_0 = self.register_layer()
- 创建回调方法,并配置按钮回调指向该方法(sender, app_data为固定传参,参考dearpygui说明文档)
- 在申请的绘图空间(self.tag_layer_0)绘制提示文字
def callback_btn_show(sender, app_data):
# 绘制文字方法
# 指定绘制位置、文字、parent指向申请的绘制页面ID 即 self.tag_layer_0
dpg.draw_text(
[100, 100], '来自DDZ的提示信息', parent=self.tag_layer_0,
size=30, color=[255, 0, 0, 255]
)
- 启动MYScrcpy,测试功能
注意,需要先连接设备,GUI才绘制绘图界面
连接设备
点击显示信息
按钮,查看绘制效果
至此,你完成了一个按钮,定义了点击事件,并绘制了提示信息。
全部代码
class DDZExtension(DPGExtension):
def start(self):
self.draw()
def device_connect(self, adv_device: AdvDevice, session: Session):
pass
def device_disconnect(self):
pass
def stop(self):
pass
def draw(self):
# 注册左侧控制面板空间,空间ID为 self.tag_pad
# 注意,一个插件只有一个唯一控制面板空间
self.register_pad()
# 申请绘制页面,保存页面ID
self.tag_layer_0 = self.register_layer()
# 创建一个Group,用于存放GUI组件,同时在Group中创建按钮
def callback_btn_show(sender, app_data):
# 绘制文字方法
# 指定绘制位置、文字、parent指向申请的绘制页面
dpg.draw_text(
[100, 100], '来自DDZ的提示信息', parent=self.tag_layer_0,
size=30, color=[255, 0, 0, 255]
)
with dpg.group(parent=self.tag_pad):
# 创建按钮
dpg.add_button(label='显示信息', callback=callback_btn_show)
总结
本章简单讲解了DPGExtension及部分方法的使用,下一章,我们将通过对配置文件进行简单配置,实现值管理及按键及鼠标的事件响应。敬请期待。
有任何问题欢迎留言或加Q群579618095交流。