【教程】0x01 创建控制面板、按钮及绘制提示——通过MYScrcpy学python系列

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包含许多方法
方法

创建控制面板及按钮

作为示例,本节我们新建一个按钮,并在主界面显示文字提示。

  1. 新增一个 draw 方法,用于绘制控制面板及按钮
    class DDZExtension(DPGExtension):
        ...

        def draw(self):
        ...
  1. 调用 register_pad() 方法,注册一个控制面板空间。(此处需要一点点dearpygui知识,参看Dearpygui,不懂也没关系,我尽量在教程中教会大家)
    def draw(self):
        # 注册左侧控制面板空间,空间ID为 self.tag_pad
        # 注意,一个插件只有一个唯一控制面板空间
        self.register_pad()
  1. 导入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='显示信息')
  1. 添加draw方法至self.start()方法中,这样在GUI加载插件时,会调用draw()方法,绘制控件。
class DDZExtension(DPGExtension):
    def start(self):
        self.draw()
  1. 运行myscrcpy,查看效果

点击插件控制面板开关按钮
插件控制面板开关
可以看到已经申请到控制面板空间,并绘制按钮控件
插件控制面板

回调方法及绘制信息

  1. 回到draw方法,申请绘制页面
    def draw(self):
        ...

        # 申请绘制页面,保存页面ID
        self.tag_layer_0 = self.register_layer()
  1. 创建回调方法,并配置按钮回调指向该方法(sender, app_data为固定传参,参考dearpygui说明文档)
    回调方法
  2. 在申请的绘图空间(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]
        )
  1. 启动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交流。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值