Matlab App Designer 学习笔记

提示:本文的学习视频来自B站小刘老师的教程
链接:https://www.bilibili.com/video/BV16f4y147x9?from=search&seid=207025892604601832&spm_id_from=333.337.0.0


目录

前言

一、Button、Label和文本编辑控件使用

二、数字框控件-布局技巧-赋值技巧

1.数字框控件

2.布局技巧

3.赋值技巧

​三、Lamp灯控件-visible-enable-tooltip的使用

1.Lamp灯控件

2.visible-enable-tooltip

 四、三种toogle-switch开关-strcmp函数的介绍(重点)

1.三种toogle-switch

 2.strcmp函数

五、坐标轴控件axis函数绘图

1.hold函数 

 2.grid函数

六、简易图像工具箱app的设计

1.Msgbox函数

 2.questdlg函数

 3.uigetfile函数

4.strcat函数

5.isequal函数

七、 startupFcn回调函数的使用和function函数命令的封装

 1.startupFcn函数的使用

 2.function函数的使用

八、滑块控件-仪表盘控件的使用

1.布局

2.代码

3.运行

九、日期选择器和文本区域控件 

1.代码:

2.运行

 十、分档旋钮控件的使用

 1.   代码

2.运行结果:

十一、微调控件的使用和参数化编程

1.目的

2.代码

3.结果

 十二、单选按钮的使用

1.代码

2.结果

十三、复选框控件和class函数的使用

1.class函数

 2.代码

3.运行结果

 十四、读取表格控件的应用

 1.readtable函数

2.table2array函数

 3.表格的增加和删除



前言

本人因毕业设计需要学习Matlab app designer ,所以写一篇文章做为学习笔记巩固知识,要想具体学习请看原视频。


一、Button、Label和文本编辑控件使用

  • 前端:使用控件,分别是文本标签和按钮
  •            在这里插入图片描述                            在这里插入图片描述                          在这里插入图片描述
    标签可以放大、调节字体内容及颜色以及背景颜色,排版如下:

    在这里插入图片描述


    在Button控件处右键添加回调函数
    代码如下:
app.TextArea.Value="Hello world"

点击运行,再点击Button控件即可在文本控件中出现Hello world字样

在这里插入图片描述

二、数字框控件-布局技巧-赋值技巧

1.数字框控件

设计一个计算平均数的软件,代码如下:

    %赋值;
    one_1=app.one.Value;
    two_2=app.two.Value;
    three_3=app.three.Value;
    %计算
    average=one_1+two_2+three_3;
    average=average./3;
    app.average.Value=average;

运行结果如下:

在这里插入图片描述

2.布局技巧

可以选中右键点击组合或对齐,可以更方便的调整布局

在这里插入图片描述

3.赋值技巧

在右侧可以右键将相应控件重命名达到容易记住的目的。

在这里插入图片描述

​三、Lamp灯控件-visible-enable-tooltip的使用

1.Lamp灯控件

 代码:

            %赋值给环境变量
            value = app.temp.Value;
            if value>=500;
                app.Lamp_2.Color='1.00,0.00,0.00';%注意lamp后面有个color
                app.show_tips.Value="温度过高";
            elseif value<500 &&value>=400
                app.Lamp_2.Color='0.00,1.00,0.00';
                 app.show_tips.Value="温度适中";
            else
                app.Lamp_2.Color='0.30,0.75,0.93';
                 app.show_tips.Value="温度偏低";
            end

运行结果:

 注意:在给灯的颜色赋值时需加上.color

2.visible-enable-tooltip

visible:即Lamp灯的可见性

enable:(取消选择颜色会半透明不知道有啥用)

tooltip:

          

 四、三种toogle-switch开关-strcmp函数的介绍(重点)

1.三种toogle-switch

                                                                 

代码如下:

            value = app.Switch.Value;
            %if条件判断
            %  r red     g green
            if strcmp(value,"On");
                app.Lamp.Color='r';
            else
                app.Lamp.Color='g';
            end

 运行结果:

 2.strcmp函数

strcmp
比较字符串全页折叠
语法
tf = strcmp(s1,s2)
说明
示例
tf = strcmp(s1,s2) 比较 s1 和 s2,如果二者相同,则返回 1 (true),否则返回 0 (false)。如果文本的大小和内容相同,则它们将视为相等。返回结果 tf 的数据类型为 logical。

输入参数可以是字符串数组、字符向量和字符向量元胞数组的任何组合。

五、坐标轴控件axis函数绘图

1.hold函数 

hold
添加新绘图时保留当前绘图
语法
hold on
hold off
hold all
hold
hold(ax,___)
说明
示例
hold on 保留当前坐标区中的绘图,从而使新添加到坐标区中的绘图不会删除现有绘图。新绘图基于坐标区的 ColorOrder 和 LineStyleOrder 属性使用后续的颜色和线型。MATLAB® 将调整坐标区的范围、刻度线和刻度标签以显示完整范围的数据。如果不存在坐标区,hold 命令会创建坐标区。

示例
hold off 将保留状态设置为 off,从而使新添加到坐标区中的绘图清除现有绘图并重置所有的坐标区属性。添加到坐标区的下一个绘图基于坐标区的 ColorOrder 和 LineStyleOrder 属性使用第一个颜色和线型。此选项为默认行为。

hold all 与 hold on 相同。在以后的版本中将会删除该语法。请改用 hold on。

hold 在 on 和 off 之间切换保留状态。

示例
hold(ax,___) 为 ax 指定的坐标区而非当前坐标区设置 hold 状态。请在前面任何语法中的所有其他参数之前指定 ax。使用单引号将 'on' 和 'off' 输入引起来,例如 hold(ax,'on')。

代码如下:

            %生成X数值
            x=1:0.01:10;
            y=sin(x);
            y1=cos(x);
            plot(app.UIAxes,x,y,'r');
            hold(app.UIAxes,"on");%保留上一个函数图像
            plot(app.UIAxes,x,y1,'g');

运行结果:

 2.grid函数

grid
显示或隐藏坐标区网格线
语法
grid on
grid off
grid
grid minor
grid(target,___)
说明
示例
grid on 显示 gca 命令返回的当前坐标区或图的主网格线。主网格线从每个刻度线延伸。

示例
grid off 删除当前坐标区或图上的所有网格线。

grid 切换改变主网格线的可见性。

示例
grid minor 切换改变次网格线的可见性。次网格线出现在刻度线之间。并非所有类型的图都支持次网格线。

示例
grid(target,___) 使用由 target 指定的坐标区或图,而不是当前坐标区或图。指定 target 作为第一个输入参数。使用单引号将其他输入参数引起来,例如,grid(target,'on')。

六、简易图像工具箱app的设计

1.Msgbox函数

msgbox
创建消息对话框
语法
f = msgbox(message)
f = msgbox(message,title)
f = msgbox(message,title,icon)
f = msgbox(message,title,'custom',icondata,iconcmap)
f = msgbox(___,createmode)
说明
示例
f = msgbox(message) 创建一个消息对话框,该对话框可将 message 自动换行,以适应合适大小的图窗。

如果您要在多个 App 窗口、MATLAB® 桌面或 Simulink® 上显示消息对话框,并且在响应对话框之前仍能与它们进行交互,请使用此函数。

示例
f = msgbox(message,title) 指定消息框的标题。

示例
f = msgbox(message,title,icon) 指定要在消息对话框中显示的预定义图标。

示例
f = msgbox(message,title,'custom',icondata,iconcmap) 指定要包括在消息对话框中的一个自定义图标。icondata 是定义该图标的图像数据。iconcmap 是用于该图像的颜色图。如果 icondata 是真彩色图像数组,则不需要指定 iconcmap。

示例
f = msgbox(___,createmode) 指定对话框的窗口模式。您也可以指定一个结构体数组,该数组指定窗口模式以及 message 的解释器。 

在设计视图布局如下:

 在关于按钮处添加回调函数:

            msgbox("这是一个图像处理的小demo","关于","help");

运行结果:

 2.questdlg函数


questdlg     创建问题对话框

answer = questdlg(quest)
answer = questdlg(quest,dlgtitle)
answer = questdlg(quest,dlgtitle,defbtn)
answer = questdlg(quest,dlgtitle,btn1,btn2,defbtn)
answer = questdlg(quest,dlgtitle,btn1,btn2,btn3,defbtn)
answer = questdlg(quest,dlgtitle,opts)
answer = questdlg(quest,dlgtitle,btn1,btn2,opts)
answer = questdlg(quest,dlgtitle,btn1,btn2,btn3,opts)
answer = questdlg(quest) 创建一个模态对话框,其中提出问题并返回用户的回答 - 'Yes'、'No'、'Cancel' 或 ''。

默认情况下,该对话框有三个标准按钮,其标签分别为是、否和取消。

如果用户点击其中一个按钮,则 answer 值与按下的按钮的标签相同。

如果用户点击对话框标题栏上的关闭按钮 (X) 或按下 Esc 键,则 answer 值为空字符向量 (' ')。

如果用户按下 Return 键,则 answer 值与默认所选按钮的标签相同。

answer = questdlg(quest,dlgtitle,defbtn) 指定当用户按下键盘上的 Return 键时将哪个按钮作为默认按钮。defbtn 值必须与按钮标签之一匹配。

answer = questdlg(quest,dlgtitle,btn1,btn2,defbtn) 通过用 btn1 和 btn2 的值作为按钮标签来自定义两个标准按钮。第三个标准按钮则被删除。defbtn 值必须与 btn1 或 btn2 的值匹配。

如果用户按下键盘上的 Return 键,并且 defbtn 值与任一按钮标签都不匹配,则对话框保持打开状态。
answer = questdlg(quest,dlgtitle,btn1,btn2,btn3,defbtn) 使用与 btn3 的值匹配的标签自定义第三个标准按钮。

answer = questdlg(quest,dlgtitle,opts) 指定一个 options 结构体来指定默认按钮选择以及是否使用 TeX 来解释问题文本。

answer = questdlg(quest,dlgtitle,btn1,btn2,opts) 自定义两个标准按钮,其标签分别匹配 btn1 和 btn2 的值。第三个标准按钮则被删除。
answer = questdlg(quest,dlgtitle,btn1,btn2,btn3,opts) 使用与 btn3 的值匹配的标签自定义第三个标准按钮。

代码如下:

            choice=questdlg("您要关闭吗?","关闭","Yes","No","No");
            switch choice
                case "Yes"
                    delete(app.UIFigure);%关闭程序
                    return;
                case "No"
                    return;
            end

运行结果:

 3.uigetfile函数

uigetfile   打开文件选择对话框
语法
file = uigetfile
[file,path] = uigetfile
[file,path,indx] = uigetfile
___ = uigetfile(filter)
___ = uigetfile(filter,title)
___ = uigetfile(filter,title,defname)
___ = uigetfile(___,'MultiSelect',mode)
说明
file = uigetfile 打开一个模态对话框,其中列出了当前文件夹中的文件。用户可以在这里选择或输入文件的名称。如果文件存在并且有效,当用户点击打开时,uigetfile 将返回文件名。如果用户点击取消或窗口关闭按钮 (X),uigetfile 将返回 0。

当用户点击打开时,[file,path] = uigetfile 将返回文件的名称和路径。如果用户点击取消或窗口关闭按钮 (X),uigetfile 将为两个输出参数都返回 0。
当用户点击打开时,[file,path,indx] = uigetfile 将返回在对话框中选择的筛选器的索引。
___ = uigetfile(filter) 指定文件扩展名,根据该扩展名筛选对话框中显示的文件。可以将此语法与上述语法中的任何输出参数结合使用。

通常,只显示文件扩展名匹配的文件。在某些平台上,uigetfile 还会显示与筛选器不匹配的文件,但这些文件的文件名会灰显。如果筛选器缺失或为空,uigetfile 将使用默认文件类型列表(例如,所有 MATLAB® 文件)。
___ = uigetfile(filter,title) 指定对话框标题。要使用默认文件筛选器进行筛选,但指定自定义标题,请使用空引号作为筛选器值。例如:

file = uigetfile('','Select a File')
___ = uigetfile(filter,title,defname) 为文件名字段指定默认文件名。
___ = uigetfile(___,'MultiSelect',mode) 指定用户是否可以选择多个文件。将模式设置为 'on' 将允许进行多选。默认情况下设置为 'off'。Windows® 库可以跨多个文件夹。

4.strcat函数

strcat
水平串联字符串
语法
s = strcat(s1,...,sN)
说明
s = strcat(s1,...,sN) 水平串联 s1,...,sN。每个输入参数都可以是字符数组、字符向量元胞数组或字符串数组。

如果任一输入是字符串数组,则结果是字符串数组。

如果任一输入是元胞数组,并且没有输入是字符串数组,则结果是字符向量元胞数组。

如果所有输入都是字符数组,则结果是字符数组。

对于字符数组输入,strcat 会删除尾随的 ASCII 空白字符:空格、制表符、垂直制表符、换行符、回车和换页符。对于元胞数组和字符串数组输入,strcat 不删除尾随空白。

5.isequal函数

isequal
确定数组相等性
语法
tf = isequal(A,B)
tf = isequal(A1,A2,...,An)
如果 A 和 B 等效,则 tf = isequal(A,B) 返回逻辑值 1 (true);否则,返回逻辑值 0 (false)。有关每种数据类型的等效性的定义,请参阅输入参数部分。NaN(非数值)、NaT(非时间)、未定义的分类元素和 <missing> 值被视为与其他元素不相等,彼此之间也不相等。

要将 NaN、NaT、<undefined> 和 <missing> 值视为与其他此类值相等,请使用 isequaln。
如果所有输入是等效的,则 tf = isequal(A1,A2,...,An) 返回逻辑值 1 (true)。

代码如下:

            [filename,pathname]=uigetfile({'*.jpg';'*.bmp';'*.tif';'*.*'});
            if isequal(filename,0) ||isequal(pathname,0)%||是逻辑运算符   与
                errordlg("没有选中文件","错误");
            else
                %记录获取文件的名字和路径
                file=strcat(pathname,filename);
            end
            %原图
            im=imread(file);
            imshow(im,'Parent',app.UIAxes);
            msgbox("读取成功","提示");
            %灰度图
            gray_image=rgb2gray(im);
            imshow(gray_image,'Parent',app.UIAxes2);

运行结果:

七、 startupFcn回调函数的使用和function函数命令的封装

 1.startupFcn函数的使用

点击运行后直接使用

 代码如下

            im=imread("188.jpg");
            imshow(im,'Parent',app.UIAxes);

注:此处188.jpg文件须与此mapp文件同处一个文件夹!

运行结果:

 2.function函数的使用

function
声明函数名称、输入和输出
语法
function [y1,...,yN] = myfun(x1,...,xM)
说明
function [y1,...,yN] = myfun(x1,...,xM) 声明名为 myfun 的函数,该函数接受输入 x1,...,xM 并返回输出 y1,...,yN。此声明语句必须是函数的第一个可执行代码行。有效的函数名称以字母字符开头,并且可以包含字母、数字或下划线。

您可以将函数保存在以下位置:

只包含函数定义的函数文件中。文件的名称须与文件中第一个函数的名称一致。

包含命令和函数定义的脚本文件中。函数必须位于该文件的末尾。脚本文件不能与文件中的函数具有相同的名称。R2016b 或更高版本的脚本中支持函数。

文件可以包含多个局部函数或嵌套函数。为提高可读性,可使用 end 关键字来表示文件中每个函数的末尾。以下情况下需要 end 关键字:

文件中有任意函数包含嵌套函数。

该函数是函数文件中的局部函数,并且文件中有局部函数使用 end 关键字。

该函数是脚本文件内的局部函数。

 代码;

ee=test(1,2,3)

function ee=test(d,e,f)
ee=d+e+f
end

注:function 函数必须写在后面!

结果

 但是在Matlab App designer中需要点击

 代码:


这样处理可以简化代码的使用! 


八、滑块控件-仪表盘控件的使用

1.布局

2.代码

            %赋值给摄氏温度
            changingValue = event.Value;
            app.Gauge_3.Value=changingValue;
            
            %定义华氏温度
            hua=32+changingValue*1.8;
            app.Gauge.Value=hua;
            
            %定义开尔文温度
            kai=changingValue+273.15;
            app.Gauge_2.Value=kai;

3.运行

九、日期选择器和文本区域控件 

1.代码:

            value = app.DatePicker.Value;
            value=string(value);
            app.TextArea.Value=value;

 注:在第二行,必须把value的值强制转化成字符串才能运行成功,否则会报错

2.运行

 十、分档旋钮控件的使用

 1.   代码

            value = app.Knob.Value;
            if strcmp(value,'低')
                app.Lamp.Color='0.00,1.00,0.00';
            elseif  strcmp(value,'中');
                app.Lamp.Color='0.30,0.75,0.93';
            elseif    strcmp(value,'高');
                app.Lamp.Color='1.00,0.00,0.00';
            else strcmp(value,'关');
                app.Lamp.Color='0.90,0.90,0.90';

            end

2.运行结果:

                                                     

十一、微调控件的使用和参数化编程

1.目的

实现随着微调器值的增加,函数图像也相应的出现

2.代码

            changingValue = event.Value;
            app.Gauge.Value=changingValue;
            %进行绘图
            x=1:0.1:changingValue;
            y=cos(x);
            plot(app.UIAxes,x,y)

3.结果

 十二、单选按钮的使用

1.代码

            selectedButton = app.ButtonGroup.SelectedObject;
            %开始逻辑书写
            switch selectedButton.Text%此处一定要加上.Text!
                case '红'
                    app.Lamp.Color='1.00,0.00,0.00';
                case '黄'
                    app.Lamp.Color='1.00,1.00,0.07';
                case '绿'
                    app.Lamp.Color='0.39,0.83,0.07';
            end

2.结果

十三、复选框控件和class函数的使用

1.class函数

class
对象的类
语法
className = class(obj)
说明
className = class(obj) 返回 obj 的类的名称。

 

Java 对象的类
获取 Java 对象的类名。

jObject = java.lang.String('Java string');
className = class(jObject);
disp(className)
java.lang.String

 2.代码

            value = app.CheckBox.Value;
            %判断类型
            app.EditField.Value=class(value);

3.运行结果

 此结果表面复选框的value是逻辑值,非0即1,因此可以根据此结果写下如下代码:

            value = app.CheckBox.Value;
            %判断类型
            app.EditField.Value=class(value);
            if value==true
                app.Lamp.Color='r';
            elseif value==false
                app.Lamp.Color='b';
            end

 结果:

 十四、读取表格控件的应用

 1.readtable函数

readtable
基于文件创建表
语法
T = readtable(filename)
T = readtable(filename,opts)
T = readtable(___,Name,Value)
示例
T = readtable(filename) 通过从文件中读取列向数据来创建表。

readtable 基于文件的扩展名确定文件格式:

.txt、.dat 或 .csv(适用于带分隔符的文本文件)

.xls、.xlsb、.xlsm、.xlsx、.xltm、.xltx 或 .ods(适用于电子表格文件)

readtable 为该文件中的每列在 T 中创建一个变量并从文件的第一行中读取变量名称。默认情况下,readtable 会根据在输入文件的每列中检测到的数据值来创建具有适当数据类型的变量。

示例
T = readtable(filename,opts) 使用导入选项 opts 创建表。

示例
T = readtable(___,Name,Value) 基于文件创建一个表,并通过一个或多个名称-值对组参数指定其他选项。例如,您可以指定 readtable 是将文件的第一行读取为变量名称还是数据。

要为数据设置特定的导入选项,您可以使用 opts 对象,也可以指定名称-值对组。当您指定除 opts 之外的名称-值对组时,readtable 仅支持下列名称-值对组:

文本和电子表格参数 - ReadVariableNames、ReadRowNames

仅文本参数 - DateLocale、Encoding

仅电子表格参数 - Sheet、UseExcel

代码如下:

            %读取表格
            t=readtable("excel.xlsx");
            app.UITable.Data=t;

 即可读取excel文件


注:excel必须和matlab文件在同一个文件夹内才可以读取


结果: 

 

 若还想读取表中的x,y还需添加一行代码:

            %读取表格
            t=readtable("excel.xlsx");
            app.UITable.Data=t;
            %赋值
            app.UITable.ColumnName=t.Properties.VariableNames;%读取变量名

结果:

 若想改变原来表中的变量名称,只有数值则代码:

            %读取表格
            t=readtable("excel.xlsx");
            app.UITable.Data=t;
            %赋值
            
            t.Properties.VariableNames{1}='date';
            t.Properties.VariableNames{2}='price';
            app.UITable.ColumnName=t.Properties.VariableNames;%读取变量名

 若想使用excel的数据进行X-Y坐标绘图,则需使用table2array函数

2.table2array函数

table2array
将表转换为同构数组
语法
A = table2array(T)
说明
示例
A = table2array(T) 将表 T 转换为同构数组 A。

 则代码:

            %读取表格
            t=readtable("excel.xlsx");
            app.UITable.Data=t;
            %赋值
            
            %t.Properties.VariableNames{1}='date';
            %t.Properties.VariableNames{2}='price';
            app.UITable.ColumnName=t.Properties.VariableNames;%读取变量名
            
            %绘图
            %读取列
            x=table2array(t(:,"x"));
            y=table2array(t(:,"y"));
            plot(app.UIAxes,x,y)

 若想绘制其他种类的图像,则可在编辑器节目查找函数:

 例如散点图:

            %读取表格
            t=readtable("excel.xlsx");
            app.UITable.Data=t;
            %赋值
            
            %t.Properties.VariableNames{1}='date';
            %t.Properties.VariableNames{2}='price';
            app.UITable.ColumnName=t.Properties.VariableNames;%读取变量名
            
            %绘图
            %读取列
            x=table2array(t(:,"x"));
            y=table2array(t(:,"y"));
            %plot(app.UIAxes,x,y)
            %散点图
            scatter(app.UIAxes,x,y,'r','filled');

 其中filled代表绘制的是实心点。

 3.表格的增加和删除

 由于这里用到两个按钮,但是需要使用同一个表的函数,所以需要将存储表数据的变量t升级为公共属性即:

    
    properties (Access = public)
        t % Description
    end
    

此时,所有用到t的部分都要使用app.t

            %读取表格
            
            
            
            app.t=readtable("excel.xlsx");
            app.UITable.Data=app.t;

 

            date_1=app.EditField.Value;
            price=app.EditField_2.Value;
            nr={date_1 price};
            %开始增加
            app.UITable.Data=[app.t;nr];

 

 若想删除某一行则

            row_n=app.EditField_3.Value;
            %对行进行缺省
            app.UITable.Data(row_n,:)=[];

 结语:本文对视频中小刘老师讲解的内容进行了一定程度上的删减,只留下相关代码内容与结果,本次学习让我熟悉了Matlab App Designer的使用,也让我踏进了编程的世界!

  • 24
    点赞
  • 224
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
MATLAB App Designer中,旋钮(Knob)是一种常用的控件,用于调节数值或参数的大小。旋钮通常用于模拟仪器的旋钮或滑动条的功能,可以通过拖动旋钮来改变数值。在App Designer中,您可以通过添加旋钮控件来实现这个功能。 要在MATLAB App Designer中添加旋钮控件,您可以按照以下步骤操作: 1. 打开App Designer并创建一个新的App。 2. 在设计视图中,从工具箱中拖动旋钮控件到您的App界面上。 3. 在属性编辑器中,您可以设置旋钮的各种属性,例如最小值、最大值、初始值、步长等。这些属性将决定旋钮的行为和显示方式。 4. 您还可以为旋钮添加回调函数,以便在旋钮值发生变化时执行特定的操作。 通过使用旋钮控件,您可以方便地实现在MATLAB App Designer中调节数值或参数的功能。希望这个回答对您有帮助!\[2\] #### 引用[.reference_title] - *1* [Matlab App Designer 学习笔记](https://blog.csdn.net/weixin_53451011/article/details/123446659)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [《MATLAB App Designer从入门到实践》随书源代码](https://blog.csdn.net/icqaa/article/details/123294944)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值