零基础快速上手HarmonyOS ArkTS开发4---从简单的页面开始

接着上一次零基础快速上手HarmonyOS ArkTS开发3---应用程序框架的继续往下。

常用基础组件:

概述:

关于组件的一些基础概念就里就不多说了,官方有很详细的说明,而在HarmonyOS按功能分有如下几大类组件:基础组件、容器组件、媒体组件、绘制组件、画布组件。而这里先从最基础的组件开始学习,有Text、Image、TextInput、Button、LoadingProgress等,以一个最常见的登录界面来说:

 界面中的是由以下几个基础组件搭建而成:

所以下面先来学习这几个基础组件。

Image:

用来渲染展示图片,支持加载本地和网络图片, 

基本使用:

对应登录界面的这个LOGO:

其中是设置了图片数据源和图片的大小:

所以下面来看一下图片相关的设置。

设置图片数据源:

它的接口形式如下:

Image(src: string | PixelMap | Resource)

其中src是图片数据源,支持以下三种类型:

1、使用string数据加载图片:

其中需要注意的是加载网络图片时需要在module.json5文件中申明网络访问权限:

它不止能加载网络图片,还可以支持本地图片,官方API对其的描述下面贴一下:

当使用相对路径引用本地图片时,例如Image("common/test.jpg"),不支持跨包/跨模块调用该Image组件,建议使用Resource格式来管理需全局使用的图片资源。

  • 支持Base64字符串。格式data:image/[png|jpeg|bmp|webp];base64,[base64 data], 其中[base64 data]为Base64字符串数据。
  • 支持file://路径前缀的字符串。用于读取本应用安装目录下files文件夹下的图片资源。需要保证目录包路径下的文件有可读权限。
2、PixelMap格式为像素图,常用于图片编辑的场景。

3、使用Resource数据加载图片:

可以跨包/跨模块访问资源文件,是访问本地图片的推荐方式。

也就是需要将图片添加到resources的media/rawfile目录下:

设置图片大小:

有三种设置方式。

1、使用number数据设置图片大小:

其中默认单位使用的是“vp”,类似于Android的sp,屏幕密度相关像素,在HarmonyOS中的单位有如下几种:

2、使用string数据设置图片大小:

如果是这种形式则需要显示的加上单位。

3、使用Resource数据设置图片大小: 【推荐】

此时则需要在float.json文件中定义图片宽高:

这种方式是最推荐的,统一放到Resource中进行维护管理。

设置缩放类型:

关于图片通常还会有缩放类型的设置,这里其实官网已经介绍得非常详细了,这里过一下,比如有这么一张源图:

而设置缩放类型是如下设置的:

具体不同的缩放类型其对应的效果如下:

1、Contain:保持宽高比进行缩小或者放大,使得图片完全显示在显示边界内。

2、Cover(默认值):保持宽高比进行缩小或者放大,使得图片两边都大于或等于显示边界。

3、Auto:自适应显示。

4、Fill:不保持宽高比进行放大缩小,使得图片充满显示边界。

5、ScaleDown:保持宽高比显示,图片缩小或者保持不变

6、None:保持原有尺寸显示。

Text:

基本使用:

对应登录界面的这个文本:

下面具体来看一下相关的设置:

设置文本内容:

Text(content?: string | Resource)

其中入参:content是文本内容。

1、使用string数据设置文本内容:

2、使用Resource数据设置文本内容:【推荐】

其中文本内容定义在resources下的string.json中:

设置文本大小:fontSize

1、使用number数据设置文本大小:

其默认单位是fp。

2、使用string数据设置文本大小:

此时就需要显示的指定像素单位了。

3、使用Resource数据设置大小:【推荐】

此时则需要在float.json文件中定义文本大小:

设置文本精细:fontWeight

1、使用number数据设置文本精细:

设置文本的字体粗细,number类型取值[100, 900],取值间隔为100,默认为400,取值越大,字体越粗。

2、使用FontWeight枚举类型设置文本精细:

它可以取下面这些枚举类型:

设置文本颜色:

1、使用Color枚举设置文本颜色:

2、使用number数据设置文本颜色:

其number类型值为16进制整数。

3、使用string数据设置文本颜色:

其数据格式为rgb或rgba颜色。

4、使用Resource设置文本颜色:【推荐】

同样也需要在color.json中定义文本颜色:

TextInput:

可以输入单行文本并支持响应输入事件,比如在登录界面中的账号输入框:

基本使用:

1、设置提示文本:

这种提示功能使用placeholder属性,另外还可以使用placeholderColor和placeholderFont分别设置提示文本的颜色和样式,示例代码如下:

TextInput({ placeholder: '请输入帐号' }).placeholderColor(0x999999).placeholderFont({ size: 20, weight: FontWeight.Medium, family: 'cursive', style: FontStyle.Italic })

其效果:

2、设置最大输入字符数:

使用maxLength属性来进行设置。

3、设置文本框输入类型:

其类型有:

Button:

基本使用:

1、设置按钮样式:

其中说一下按钮的样式,有如下几种:

容器组件:

在Android中有比较经典的四大布局组件(LinearLayout、RelativeLayout、FrameLayout、ConstraintLayout),这些都是父布局,类似有在Harmony中也有这样的容器组件,提供了Column和Row容器来实现线性布局,还是以登录界面为例,以控件的角度来将页面的布局可以表示为:

可以看到整体的布局是按着从上到下的顺序来排列的,所以此时可以由Column容器来进行布局:

而有些元素是需要水平排列的,此时就可以使用Row容器来进行布局:

布局基础知识:

主轴和交叉轴概念:

在布局容器中,默认存在两根轴,分别是主轴和交叉轴,这两个轴始终是相互垂直的。不同的容器中主轴的方向不一样的。

主轴:

在Column容器中的子组件是按照从上到下的垂直方向布局的,其主轴的方向是垂直方向;在Row容器中的组件是按照从左到右的水平方向布局的,其主轴的方向是水平方向。

交叉轴:

与主轴垂直相交的轴线,如果主轴是垂直方向,则交叉轴就是水平方向;如果主轴是水平方向,则交叉轴是垂直方向。

属性介绍:

了解了布局容器的主轴和交叉轴概念之后,有助于我们更好地理解子组件在主轴和交叉轴的排列方式。这里需要学习两个属性:justifyContent和alignItems,其具体的含义如下:

如果不理解主轴和交叉轴的概念,那么对于这两个属性的运用就会很迷糊。 对于这两个属性的使用官方其实已经解释得非常详细了,这里照着官方的整体再来学习一遍。

1、主轴方向的对齐(justifyContent):

对于justifyContent属性,它接收的参数类型为FlexAlign,有如下几个值:

光看这些文字对于这些值的设置效果还是非常抽象的,所以下面看一下每一种参数类型设置之后的效果,这样就比较容易理解了:

1、Start:元素在主轴方向首端对齐,第一个元素与行首对齐,同时后续的元素与前一个对齐。

2、Center:元素在主轴方向中心对齐,第一个元素与行首的距离以及最后一个元素与行尾距离相同。

3、End:元素在主轴方向尾部对齐,最后一个元素与行尾对齐,其他元素与后一个对齐。

4、SpaceBetween:元素在主轴方向均匀分配弹性元素,相邻元素之间距离相同。 第一个元素与行首对齐,最后一个元素与行尾对齐。

5、SpaceAround:元素在主轴方向均匀分配弹性元素,相邻元素之间距离相同。 第一个元素到行首的距离和最后一个元素到行尾的距离是相邻元素之间距离的一半。

6、SpaceEvenly:元素在主轴方向等间距布局,无论是相邻元素还是边界元素到容器的间距都一样。

2、交叉轴方向的对齐(alignItems):

对于Column容器它的交叉轴是水平方向,所以参数类型为HorizontalAlign(水平对齐),有如下几种对齐方式:

1、Start:设置子组件在水平方向上按照起始端对齐。

2、Center(默认值):设置子组件在水平方向上居中对齐。

3、End:设置子组件在水平方向上按照末端对齐。

而对于Row容器的交叉轴是垂直方向,所以参数为VerticalAlign(垂直对齐),它有如下几种对齐方式:

1、Top:设置子组件在垂直方向上居顶部对齐。

2、Center(默认值):设置子组件在竖直方向上居中对齐。

3、Bottom:设置子组件在竖直方向上居底部对齐。

接口介绍:

对于Column和Row容器都有一个可选参数space,表示子组件在主轴方向上的间距:

其效果如下:

实践:构建登录页面:

接下来咱们则用学过的布局来实现开篇所示的这么一个登录静态界面,实操一把:

1、新建工程:

其项目名称直接校仿官方的codelabs的https://gitee.com/harmonyos/codelabs/tree/master/ArkTSComponents

2、新建登录页面文件:

@Entry
@Component
struct LoginPage {@State message: string = 'Login Page'build() {Row() {Column() {Text(this.message).fontSize(50).fontWeight(FontWeight.Bold)}.width('100%')}.height('100%')}
}

先让其可以显示出来,此时需要修改这里的加载页面:

运行:

界面构建:

接下来则来进行界面的构建:

1、构建Logo区域:

整个是一个上下布局,所以就需要用到这次所学的Column容器组件了:

其中会用到一些常量,这里为了省事,直接从官方的源码中拷过来了:

CommonConstants.ets:

/*** Common constants for all features.*/
export default class CommonConstants {/*** Input length of the account.*/static readonly INPUT_ACCOUNT_LENGTH = 11;/***  Input length of the password.*/static readonly INPUT_PASSWORD_LENGTH = 8;/***  Left padding of the input box*/static readonly INPUT_PADDING_LEFT = 0;/*** Delay time of simulated login*/static readonly LOGIN_DELAY_TIME = 2000;/*** Common Spacing of Components*/static readonly COMMON_SPACE = 12;/*** Title text of the home page*/static readonly HOME_TITLE = '首页';/*** Title text of the setting page*/static readonly MINE_TITLE = '我的';/*** Spacing of other login methods*/static readonly LOGIN_METHODS_SPACE = 44;/*** The width or height of the component is spread across the parent component.*/static readonly FULL_PARENT = '100%';/*** The width of button*/static readonly BUTTON_WIDTH = '90%';/*** The width of setting list*/static readonly SET_LIST_WIDTH = '42%';/*** Home tab index*/static readonly HOME_TAB_INDEX = 0;/*** Mine tab index*/static readonly MINE_TAB_INDEX = 1;
}

float.json:

{"float": [{"name": "logo_image_size","value": "78vp"},{"name": "logo_margin_top","value": "100vp"},{"name": "logo_margin_bottom","value": "8vp"},{"name": "page_title_text_size","value": "24fp"},{"name": "normal_text_size","value": "16fp"},{"name": "big_text_size","value": "18fp"},{"name": "small_text_size","value": "14fp"},{"name": "little_text_size","value": "12fp"},{"name": "login_more_margin_bottom","value": "30vp"},{"name": "login_more_margin_top","value": "8vp"},{"name": "login_input_height","value": "45vp"},{"name": "forgot_margin_top","value": "8vp"},{"name": "input_margin_top","value": "12vp"},{"name": "line_height","value": "1vp"},{"name": "login_button_height","value": "40vp"},{"name": "login_button_margin_top","value": "87vp"},{"name": "login_button_margin_bottom","value": "12vp"},{"name": "vertical_line_margin","value": "15vp"},{"name": "login_progress_size","value": "30vp"},{"name": "login_progress_margin_top","value": "20vp"},{"name": "other_login_margin_top","value": "50vp"},{"name": "other_login_margin_bottom","value": "12vp"},{"name": "login_page_padding_bottom","value": "24vp"},{"name": "other_login_image_size","value": "48vp"},{"name": "page_padding_hor","value": "12vp"},{"name": "mainPage_baseTab_top","value": "4vp"},{"name": "mainPage_baseTab_margin","value": "8vp"},{"name": "mainPage_padding","value": "12vp"},{"name": "mainPage_barHeight","value": "56vp"},{"name": "mainPage_baseTab_size","value": "25vp"},{"name": "main_tab_fontSize","value": "10fp"},{"name": "mainPage_tabTitles_margin","value": "12vp"},{"name": "mainPage_tabTitles_padding","value": "12vp"},{"name": "home_swiper_borderRadius","value": "16vp"},{"name": "home_swiper_margin","value": "24vp"},{"name": "home_grid_columnsGap","value": "8vp"},{"name": "home_grid_rowGap","value": "12vp"},{"name": "home_grid_padding","value": "12vp"},{"name": "home_grid_height","value": "124vp"},{"name": "home_grid_margin","value": "10vp"},{"name": "home_list_margin","value": "4vp"},{"name": "home_list_padding","value": "8vp"},{"name": "home_grid_borderRadius","value": "24vp"},{"name": "home_text_margin","value": "12vp"},{"name": "home_backgroundImage_borderRadius","value": "12vp"},{"name": "home_secondGrid_height","value": "260vp"},{"name": "home_secondGrid_margin","value": "10vp"},{"name": "home_homeCell_size","value": "24vp"},{"name": "home_homeCell_margin","value": "4vp"},{"name": "home_homeCell_width","value": "80vp"},{"name": "home_homeCell_height","value": "80vp"},{"name": "setting_name_margin","value": "4vp"},{"name": "setting_account_margin","value": "24vp"},{"name": "setting_account_size","value": "48vp"},{"name": "setting_account_fontSize","value": "20fp"},{"name": "setting_account_text_height","value": "28vp"},{"name": "setting_account_height","value": "96vp"},{"name": "setting_account_padding","value": "24vp"},{"name": "setting_account_borderRadius","value": "16vp"},{"name": "setting_list_height","value": "48vp"},{"name": "setting_list_padding","value": "4vp"},{"name": "setting_list_borderRadius","value": "16vp"},{"name": "setting_list_startMargin","value": "42vp"},{"name": "setting_list_endMargin","value": "24vp"},{"name": "setting_list_strokeWidth","value": "0.25vp"},{"name": "setting_button_bottom","value": "55vp"},{"name": "setting_size","value": "22vp"},{"name": "setting_padding","value": "10vp"},{"name": "setting_jump_width","value": "12vp"},{"name": "setting_jump_height","value": "24vp"},{"name": "setting_settingCell_left","value": "8vp"},{"name": "setting_settingCell_right","value": "22vp"}]
}

color.json:

{"color": [{"name": "start_window_background","value": "#FFFFFF"},{"name": "white","value": "#FFFFFF"},{"name": "background","value": "#F1F3F5"},{"name": "title_text_color","value": "#182431"},{"name": "login_more_text_color","value": "#99182431"},{"name": "placeholder_color","value": "#99182431"},{"name": "line_color","value": "#33182431"},{"name": "login_button_color","value": "#007DFF"},{"name": "login_blue_text_color","value": "#007DFF"},{"name": "other_login_text_color","value": "#838D97"},{"name": "loading_color","value": "#182431"},{"name": "mainPage_selected","value": "#1698CE"},{"name": "mainPage_normal","value": "#6B6B6B"},{"name": "mainPage_backgroundColor","value": "#F1F3F5"},{"name": "home_grid_fontColor","value": "#99182431"},{"name": "setting_button_backgroundColor","value": "#E5E8EA"},{"name": "setting_button_fontColor","value": "#FA2A2D"}]
}

此时效果如下:

接下来修改布局:

Image($r('app.media.logo')).width($r('app.float.logo_image_size')).height($r('app.float.logo_image_size')).margin({ top: $r('app.float.logo_margin_top'), bottom: $r('app.float.logo_margin_bottom') })Text($r('app.string.login_page')).fontSize($r('app.float.page_title_text_size')).fontWeight(FontWeight.Medium).fontColor($r('app.color.title_text_color'))Text($r('app.string.login_more')).fontSize($r('app.float.normal_text_size')).fontColor($r('app.color.login_more_text_color')).margin({ bottom: $r('app.float.login_more_margin_bottom'), top: $r('app.float.login_more_margin_top') })

其效果如下:

2、构建用户名密码输入框区域:

 /* 用户名、密码输入框 */TextInput({ placeholder: $r('app.string.account') }).maxLength(CommonConstants.INPUT_ACCOUNT_LENGTH).type(InputType.Number).placeholderColor($r('app.color.placeholder_color')).height($r('app.float.login_input_height')).fontSize($r('app.float.big_text_size')).backgroundColor($r('app.color.background')).width(CommonConstants.FULL_PARENT).padding({ left: CommonConstants.INPUT_PADDING_LEFT }).margin({ top: $r('app.float.input_margin_top') })Line().width(CommonConstants.FULL_PARENT).height($r('app.float.line_height')).backgroundColor($r('app.color.line_color'))TextInput({ placeholder: $r('app.string.password') }).maxLength(CommonConstants.INPUT_PASSWORD_LENGTH).type(InputType.Password).placeholderColor($r('app.color.placeholder_color')).height($r('app.float.login_input_height')).fontSize($r('app.float.big_text_size')).backgroundColor($r('app.color.background')).width(CommonConstants.FULL_PARENT).padding({ left: CommonConstants.INPUT_PADDING_LEFT }).margin({ top: $r('app.float.input_margin_top') })Line().width(CommonConstants.FULL_PARENT).height($r('app.float.line_height')).backgroundColor($r('app.color.line_color'))

其效果如下:

这里面是纯熟能生巧的代码,也非常好理解,所以就不过多解释了,照着官方的demo撸一撸就成,不过这里跟官网的源码有如下区别:

官方的源码写得非常的精练,咱们来学习一下这样的写法,其核心就是对相同的属性做了一个封装,所以我这边故意写得这么臃肿,好来看一下整个的优化过程,先来看目前代码存在什么问题?

所以有必要对其公共的属性进行一个抽取,具体如何抽取呢?看下官方的代码便知,先来将TextInput中的公共属性抽取一下:

把它抽取到一个函数中:

此时函数报错了:

找不到相关的属性,这个也容易理解,本身这些属性是来自于控件当中的,怎么可以在一个全新的函数中知道这些属性呢?那如何解决呢?这里就需要用到这么一个装饰器了@Extend:

先来看一下它的定义:

关于它更加详细的使用可以参考:文档中心,好此时对于TextInput的代码就可以精简成这样了:

同样的,对于Line也可以照此进行封装:

3、构建短信验证码及忘记密码区域:

接下来则来构建这个区域了:

这里则需要使用到水平布局Row容器了,如下:

此时运行看一下:

接下来则需要让这俩元素分散在两端,此时就需要用到上面所学的主轴方向的元素对齐了,如下:

此时运行如下:

4、构建登录注册按钮区域:

接下来则来构建这个区域:

      /* 登录注册按钮区域 */Button($r('app.string.login'), { type: ButtonType.Capsule }).width(CommonConstants.BUTTON_WIDTH).height($r('app.float.login_button_height')).fontSize($r('app.float.normal_text_size')).fontWeight(FontWeight.Medium).backgroundColor($r('app.color.login_button_color')).margin({ top: $r('app.float.login_button_margin_top'), bottom: $r('app.float.login_button_margin_bottom') })Text($r('app.string.register_account')).fontColor($r('app.color.login_blue_text_color')).fontSize($r('app.float.normal_text_size')).fontWeight(FontWeight.Medium)

运行:

这块没有什么好解释的。

5、构建其他登录方式区域:

还剩最后一个底部区域木有构建:

其中涉及到一些资源图,这里可以直接从官方源码中拷至工程中:

此时可以看到是长这样:

貌似跟预期的有一点区域,应该是整个区域是靠底部,如何让它靠在最底部呢?这里需要用到空白填充组件Blank,如下:

此时再运行就如预期了,这里来了解一下该填充组件:文档中心

看文字是不是还不太好理解,这里再看一下官方文档提供的示例就明白了:

另外此代码还有一个可以优化的点,就是:

代码都一样,除了按钮的图片资源不一样:

代码可以进行一次封装么?可以的,可以看下官方的写法,相当的精练:

所以照着优化一下:

此时代码就可以这样写了:

此时又有一个知识点,那@Builder这是啥装饰器呢?这里可以参考它:文档中心,看一下它的说明:

看一下它的简单使用示例:

也就是如果在界面中有重复使用的元素,就可以使用该装饰器对其进行一个封装,提高代码的维护性。

总结:

至此,这里通过所学完成了官方登录页面的搭建,按着视频的总结一下此次所学:

1、垂直布局使用Column容器;

2、水平布局使用Row容器;

3、space参数设置子组件在主轴方向上的对齐;

4、justContent属性设置子组件在主轴方向上的对齐;

5、alignItems属性设置子组件在交叉轴方向上的对齐;

好长一段时间没有更新了,人越来越懒~~

  关注个人公众号,获得实时推送

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/36927.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

安卓短视频去水印v1.7 简洁好用

各大平台视频无水印提取,登录即永久会员! 无水印提取,图片无水印提取 视频旋转,倒放,转gif等功能 链接:https://pan.baidu.com/s/1buoJmAvSFBiRkBmHc7Nn5w?pwd2fu4 提取码:2fu4

Lr、LrC软件下载安装 Adobe Lightroom专业摄影后期处理软件安装包分享

Adobe Lightroom它不仅为摄影师们提供了一个强大的照片管理平台,更以其出色的后期处理功能,成为了摄影爱好者们争相追捧的必备工具。 在这款软件中,摄影师们可以轻松地管理自己的照片库,无论是按拍摄日期、主题还是其他自定义标签…

浅谈如何在linux上部署java环境

文章目录 一、部署环境1.1、JDK1.2、Tomcat1.3、MySQL 二、将自己写的的程序部署到云服务器上 一、部署环境 为了在linux上部署 Java web 程序,需要安装一下环境。 1.1、JDK 直接使用 yum 命令安装 openjdk。我们 windows系统上 下载的是 oracle 官方的 jdk。而 …

用Python将PowerPoint演示文稿转换到图片和SVG

PowerPoint演示文稿作为展示创意、分享知识和表达观点的重要工具,被广泛应用于教育、商务汇报及个人项目展示等领域。然而,面对不同的分享场景与接收者需求,有时需要我们将PPT内容以图片形式保存与传播。这样能够避免软件兼容性的限制&#x…

Cisco Identity Services Engine (ISE) 3.3 Patch 2 - 基于身份的网络访问控制和策略实施系统

Cisco Identity Services Engine (ISE) 3.3 Patch 2 - 基于身份的网络访问控制和策略实施系统 思科身份服务引擎 (ISE) - 下一代 NAC 解决方案 请访问原文链接:Cisco Identity Services Engine (ISE) 3.3 Patch 2 - 基于身份的网络访问控制和策略实施系统&#xf…

centos上部署Ollama平台,实现语言大模型本地部署

网上有很多大模型,很多都是远程在线调用ChatGPT的api来实现的,自己本地是没有大模型的,这里和大家分享一个大模型平台,可以实现本地快速部署大模型。 Ollama是一个开源项目,它提供了一个平台和工具集,用于部…

C语言单链表的算法之逆序

一:什么是链表的逆序 (1)链表的逆序又叫反向,意思就是把链表中所有的有效节点在链表中的顺序给反过来 二:单链表逆序算法分析 (1)当需要对一个数据结构进行操作时,就有必要有一套算…

JS乌龟吃鸡游戏

代码&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>乌龟游戏</title><script type"text/javascript">function move(obj){//乌龟图片高度var wuGui_height 67;…

Django 模版继承

1&#xff0c;设计母版页 Test/templates/6/base.html <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><!-- 修正了模板标签的全角字符问题 -->{% block title %}<title>这个是母版页</title>{…

算法:链表

目录 链表的技巧和操作总结 常用技巧&#xff1a; 链表中的常用操作 题目一&#xff1a;反转一个单链表 题目二&#xff1a;链表的中间结点 题目三&#xff1a;返回倒数第k个结点 题目四&#xff1a;合并两个有序链表 题目五&#xff1a;移除链表元素 题目六&#xff…

平衡二叉搜索树/AVL树

VAL树的特性 左右子树高度差的绝对值不超过1。&#xff08;即左右子树高度差取值为-1&#xff0c;0&#xff0c;1&#xff09;且左右子树均为VAL树右子树的值大于左子树的值 在搜索二叉树中我们提及了搜索二叉树的退化问题。 当有序&#xff08;升序或降序&#xff09;地插入…

摸鱼大数据——Spark基础——Spark环境安装——Spark Local[*]搭建

一、虚拟机配置 查看每一台的虚拟机的IP地址和网关地址 查看路径: cat /etc/sysconfig/network-scripts/ifcfg-ens33 2.修改 VMware的网络地址: 使用VMnet8 3.修改windows的对应VMware的网卡地址 4.通过finalshell 或者其他的shell连接工具即可连接使用即可, 连接后, 测试一…

AD PCB板子裁剪与泪滴设置

在剪裁板子时。首先&#xff0c;选择选择板子的机械层&#xff0c;之后选择画线。在原来的板子上画上自己想要裁剪的图形。如下下图 之后&#xff0c;选择按照所画的线裁剪板子即可&#xff0c;如下 在焊接PCB时&#xff0c;为了防止多次焊接导至焊盘脱落可以加大焊点的接触面积…

ESP32-C3模组上跑通MQTT(6)—— tcp例程(1)

接前一篇文章:ESP32-C3模组上跑通MQTT(5) 《ESP32-C3 物联网工程开发实战》 一分钟了解MQTT协议 ESP32 MQTT API指南-CSDN博客 ESP-IDF MQTT 示例入门_mqtt outbox-CSDN博客 ESP32用自签CA进行MQTT的TLS双向认证通信_esp32 mqtt ssl-CSDN博客 特此致谢! 本回开始正式讲…

华润万家超市卡怎么用?

华润的礼品卡不仅能线下门店使用&#xff0c;还能直接叫送货上门 我最近用积分兑了几张华润卡&#xff0c;但是又没有购物需求&#xff0c;送朋友吧面值又不大&#xff0c;朋友也说用不上 最后朋友建议我在收卡云上把卡出掉&#xff0c;我试了下92折出掉了&#xff0c;价格还…

代码随想录算法训练营第四十七天| 188.买卖股票的最佳时机IV ,309.最佳买卖股票时机含冷冻期 ,714.买卖股票的最佳时机含手续费

188. 买卖股票的最佳时机 IV - 力扣&#xff08;LeetCode&#xff09; class Solution {public int maxProfit(int k, int[] prices) {int[][] dp new int[prices.length][2*k];for(int i0;i<2*k;i){if(i%2 0){dp[0][i] -prices[0];}else{dp[0][i] 0;} }for(int i1;i…

综合项目实战--jenkins节点模式

一、DevOps流程 DevOps是一种方法论,是一系列可以帮助开发者和运维人员在实现各自目标的前提下,向自己的客户或用户交付最大化价值及最高质量成果的基本原则和实践,能让开发、测试、运维效率协同工作的方法。 DevOps流程(自动化测试部分) DevOps完整流程 二、gitee+j…

计算Dice损失的函数

计算Dice损失的函数 def Dice_loss(inputs, target, beta1, smooth 1e-5):n,c, h, w inputs.size() #nt,ht, wt, ct target.size() #nt,if h ! ht and w ! wt:inputs F.interpolate(inputs, size(ht, wt), mode"bilinear", align_cornersTrue)temp_inputs t…

LLaMA-Factory安装

安装代码 https://github.com/echonoshy/cgft-llm/blob/master/llama-factory/README.md https://github.com/hiyouga/LLaMA-Factory/tree/mainLLaMA-Factoryhttps://github.com/hiyouga/LLaMA-Factory/tree/main 【大模型微调】- 使用Llama Factory实现中文llama3微调_哔哩…

TIA博途WinCC通过VB脚本从 Excel中读取数据的具体方法介绍

TIA博途WinCC通过VB脚本从 Excel中读取数据的具体方法介绍 添加 一个PLC,设置PLC的IP地址,如下图所示, 添加全局DB块,新建几个变量,如下图所示, 在数据块中添加了 tag1 …… tag6 ,共 6 个浮点数类型的变量,用来接收通过 WinCC 从 Excel 文件中读取的数据。 添加 HMI…