塑封膜厚度选择,维迪声e3—维尔晶科技的十年磨一剑 -ag真人官方入口

苗坤旺离型膜

前言:大概在去年 10 月,笔者想做一个有 gui 的词云生成器,可通过界面上的各种控件选择制图参数,定制化词云图的形状、颜色、字体等。在形状定制方面,希望有一个组件能够加载多张图片同时显示,通过点击图片来选择对应的形状。一开始搜索了半天,也没发现可用的轮子,而后因为要忙工作上的项目,这个小玩意儿的开发就搁置了,至今仍未完成(究竟会鸽到什么时候呢…)。但对于这个图片组件,当时还是写了一个可复用的雏形,如今回顾并优化一番,以便在后续补完词云生成器时能更加方便运用。那么先来看看效果吧!

一、自定义图片组件imagewidget用例

首先笔者在 qtdesigner 中拖了两个 lineedit 分别用于显示图片组页数和单个图片的路径,以及两个 pushbutton 用于控制翻页。

接着,在这个测试窗体中添加笔者自定义的组件 imagewidget ,当前设计该组件可显示一行 n 列的图片,每个图片自动缩放以正方形显示,因此仅需指定组件的列数、总宽度,以及需读取图片的文件目录。 以下用例笔者添加了宽 600、一次显示 4 张图片(即 4 列)、从 shape_images 文件夹读取图片的组件,因组件继承 qwidegt,所以可用父类方法 move() 将组件移动到主窗体中的合适位置。 将按钮的点击信号与组件的翻页方法 turn_page() 绑定, 传入 1 为下一页, -1 为上一页。 再将组件内部的图片点击信号与翻页信号,与修改 lineedit 内容的方法绑定。

class testform(qwidget, untitled.ui_form):

def __init__(self):

super(testform, self).__init__()

self.setupui(self)

# 添加自定义图像组件

self.image_widget = imagewidget(self, dir='./shape_images', col=4, w=600)

self.image_widget.move(20, 100)

self.pb_previous.clicked.connect(lambda: self.image_widget.turn_page(-1))

self.pb_next.clicked.connect(lambda: self.image_widget.turn_page(1)) # 图像列表翻页

self.image_widget.signal_order.connect(self.change_path)

self.image_widget.signal_page.connect(self.change_page)

def change_path(self, path):

self.lineedit_path.settext(path)

def change_page(self, index):

self.lineedit_page.settext(f"第{index}页")

看看在界面上实际操作的效果,通过传递翻页和图片点击的信号,我们可以执行更多的操作。例如,点击了圆形,词云生成器就获取圆形图像作为 mask 参数。

此外,imagewidget 还有一些可选参数,先分别修改 imagewidget 的列数为 2 和 6 ,我们可以看到图片都以正方形显示,而高度会自动调整,但不保持原比例。

如果不想以正方形显示,我们可以通过参数 h 指定组件的高度,还可通过参数 suit 指定图片尺寸的适应方式,如下为设置 3 列、高度为 330、保持原比例按高适应的图片组。

self.image_widget = imagewidget(self, dir='./shape_images', col=3, w=600, h=330, suit=1)

设置 1 列、高度为 330、保持原比例按宽适应的图片组。

self.image_widget = imagewidget(self, dir='./shape_images', col=1, w=600, h=330, suit=2)

在此基础上,我们可以继续强化 imagewidget 的功能和效果,比如可设置显示多行多列的图片矩阵、美化组件样式、自动轮播等。下面我们看看当前的组件是如何实现的。

二、imagewidget源码解析

1、制作相框

熟悉 qt 的同学可以想到,有一个控件可以用来显示图片,那就是 qlabel。该控件支持文本、图片、动态图,甚至是视频的加载,是个十分便利的容器。但 qlabel 本身没有实现点击事件,也就无法像按钮一样传达点击信号,那我们可以自己实现它。 首先自定义一个 mylabel 类,继承自 qlabel。笔者添加了一个整型信号,并重载了鼠标点击事件,用于在其自身被点击时传递标识,而标识则在创建对象时通过 order 参数设置。此外,笔者设置了一个简单的样式,加上了灰色边框。 如此一来,单张图片的“塑封膜"或者说"相框”,就设计好了。

class mylabel(qlabel): # 自定义label,用于传递是哪个label被点击了

signal_order = pyqtsignal(int)

def __init__(self, order=none):

super(mylabel, self).__init__()

self.order = order

self.setstylesheet("border-width: 2px; border-style: solid; border-color: gray")

def mousepressevent(self, e): # 重载鼠标点击事件

self.signal_order.emit(self.order)

2、制作相册-定制页

“相框”有了,还缺一个“相册”,我们可以通过布局来考虑图片是如何在相册中摆放的。因为布局大小跟随其父类容器,所以笔者选择了 qwidegt 来作为相册的框架。 首先,打开相册当然是在第一页嘛,然后它还有一个目录 list_files,并且选择图片和翻页时它会通过两种信号来告诉你。

class imagewidget(qwidget):

group_num = 1 # 图像列表当前组数(页数)

list_files = [] # 图像文件路径集

signal_order = pyqtsignal(str) # 图像项目信号

signal_page = pyqtsignal(int) # 页数信号

我们的这个相册虽然简单,但它也是可定制的。你要告诉它从哪儿收集图片(dir),一页显示几张图片(col),图片的宽/高(w/h)和自适应模式(suit)。

def __init__(self, parent=none, dir='./', col=1, w=10, h=none, suit=0):

super(imagewidget, self).__init__(parent)

self.get_files(dir)

self.col = col

self.w = w

self.suit = suit

if h == none:

self.h = self.w / self.col

else:

self.h = h

self.setfixedsize(self.w, self.h)

self.hbox = qhboxlayout(self)

self.hbox.setcontentsmargins(0, 0, 0, 0)

self.show_images_list() # 初次加载图像列表

def get_files(self, dir): # 储存需加载的所有图像路径

for file in os.listdir(path=dir):

if file.endswith('jpg') or file.endswith('png'):

self.list_files.append(dir "/" file)

这个相册的风格比较复古,是一卷胶带的形式,它每页展示的都是一行图片,所以我们采用水平布局 qhboxlayout。

3、制作相册-翻页

在放入图片之前,先想想这个相册要怎么翻页。由于不能虚空翻页,所以在ag真人官方入口首页不可往前翻,在末页不可往后翻,无图时也没必要翻空气。 用 flag 表示目录中的图片数, math.ceil(flag/self.col) 即表示翻完装满了图片的页面后,多出来的图片所在的页数(末页)。比如每页 4 张图,一共 9 张图,计算得末页数为 3,即第一页、第二页都放满了 4 张,而第三页(末页)只放了 1 张。翻完页通过信号说一声到第几页了,最后把该页的图片展示出来。

def turn_page(self, num): # 图像列表翻页

flag = len(self.list_files)

if self.group_num == 1 and num == -1: # 到ag真人官方入口首页时停止上翻

qmessagebox.about(self, "remind", "this is the first page!")

elif (self.group_num == math.ceil(flag/self.col) and num == 1) or flag==0: # 到末页页时停止下翻

qmessagebox.about(self, "remind", "no more image! ")

else:

self.group_num = num # 翻页

self.signal_page.emit(self.group_num)

self.show_images_list() # 重新加载图像列表

4、制作相册-放入图片

相册的基本框架有了,开始整理图片往里塞吧!先确保新的每一页都是空的,不能放重了。

def show_images_list(self): # 加载图像列表

for i in range(self.hbox.count()): # 每次加载先清空内容,避免layout里堆积label

self.hbox.itemat(i).widget().deletelater()

(继续补充 show_images_list(),下同)接着我们想想在当前页,要放哪几张照片。假设 col 为 4,那么在第一页,我们就从第 1 张放到第 4 张;第二页,从第 5 张放到第 8 张,以此类推。再用 count 记录当前页已经放了几张了。别忘了我们的相册是可定制尺寸的,图片宽度是一页相册的总宽度除以该页的图片数。

# 设置分段显示图像,每col个一段

group_num = self.group_num

start = 0

end = self.col

if group_num > 1:

start = self.col * (group_num - 1)

end = self.col * group_num

count = 0 # 记录当前页载入的label数

width = int(self.w / self.col) # 自定义label宽度

height = self.h # 自定义label高度

想好了就开始放入图片吧,根据客户指定的适应模式(suit),我们还提供了裁剪尺寸的服务,可以按原始比例(0)、按相框高(1)、按相框宽(2)来裁剪,并且裁剪时会根据相框的厚度(border-width: 2px)进行微调(-2*self.col 和 -4)以得到最佳效果。

for index, path in enumerate(self.list_files): # group_num = 1 则加载前col个,以此类推

if index < start:

continue

elif index == end:

break

# 按路径读取成qpixmap格式的图像,根据适应方式调整尺寸

if self.suit==0:

pix = qpixmap(path).scaled(width-2*self.col, height-4)

elif self.suit==1:

pix = qpixmap(path)

pix = qpixmap(path).scaled(int(pix.width()*height/pix.height())-2*self.col, height-4)

elif self.suit==2:

pix = qpixmap(path)

pix = qpixmap(path).scaled(width-2*self.col, int(pix.height()*width/pix.width())-4)

(继续补充 for 循环)裁剪好后就塑封装框啦,然后把带图片的相框放进相册里。我们这是个电子相册,绑定好每个相框的信号,这样触摸图片就有点读机的效果了。

label = mylabel(index)

label.setpixmap(pix) # 加载图片

self.hbox.addwidget(label) # 在水平布局中添加自定义label

label.signal_order.connect(self.choose_image) # 绑定自定义label点击信号

count = 1

(for 循环外)这个相册有脾气,说每页要放几张图就要放几张,不够就要放白纸进去,其实也是为了有实物填充才好撑门面嘛。

if not count==self.col:

for i in range(self.col - count):

label = qlabel()

self.hbox.addwidget(label) # 在水平布局中添加空label补位

不然有空缺的相册页就会变形移位了,当然,没有强迫症不加也没关系。 另外再瞅瞅刚才说的点读机,先将 mylabel 中的点击信号传至 choose_image(),再利用 imagewidget 中的点击信号发射出去,由此便可实现点击任意图片后对该图片进行的一些操作。

def choose_image(self, index): # 选择图像

self.signal_order.emit(self.list_files[index])

结语

至此,可定制的图片组件 imagewidget 就初步完成了。源码可通过以下方式自取,可供学习参考,欢迎进行二次开发或提出改进版本。在写这篇之前笔者又去搜索了一番,还发现了一些新方案,待尝试研究后将继续码文分享(咕咕)。这里是放自己鸽子的塞翁,下一篇再见! github地址 gitee地址

hi 体验新鲜好物,吐槽反人类设计,这里是chainnode测评。

我是本期好物体验官少秀。

2021年,沉寂已久的加密市场迎来了久违的牛市,大量新人入场的同时,怎样安全的“拿住”自己的数字资产成为多数人迫切的需求。

行业内公认最安全的数字资产存储方式便是利用硬件钱包实现资产的离线冷存储。

本期测评我们为大家带来了hyperpay四月推出的新品hypermate pro硬件钱包,下面时间我们一同体验一下这款钱包吧~

<开箱体验>

在我手中的hypermate pro是hyperpay团队于今年四月推出的新品。

hypermate pro包装盒简约大气,通体纯白的纸盒中心点缀着烫银工艺的logo。包装盒较为轻薄,仅有手掌大小以及一本书的厚度,盒子外有一套完整塑封膜保护。

撕开最外层塑封,划开防拆标贴。

打开盒子呈现的就是镶嵌在泡棉内的hypermate pro钱包主机,而下层分别放的是一支速干油性笔、一条typec数据线以及一个保护卡包,其中卡包层下方还收纳着一个白色的小盒子。

白色小盒内是一块金属材质的24位助记词板、一个中英文助记词板使用说明卡以及一本助记词手册(主要是记录了完整的bip39助记词表以及一些助记词备份时的加密参考)

在配件上,值得一提的还有保护卡包。该保护卡包采用的是金属纤维混纺工艺,可有效屏蔽蓝牙信号。日常收纳时不用担心钱包设备会受电磁干扰,极大的杜绝黑客通过蓝牙入侵钱包的风险。

以上就是这款钱包的全部包装内容了。

<上手体验>

扫描助记词手册最后一页的二维码,在手机上下载安装hyperpay app,下一步我们就对hypermate pro钱包进行初始化操作。

钱包尺寸小巧,70mm*44mm*4.5mm的尺寸拿在手中就像一个超薄的mp3播放器,通体黑色磨砂的金属材质不易留下指纹,机身按钮全部位于正面。

[pro钱包初始化操作]

① 揭开正面的保护膜,我们长按屏幕下方最左侧的电源按钮开机

② 首先出现的是语言选择的界面,支持两种语言(简体中文和英语)

③ 上下键选择好语言后点击ok,下一步就来到了创建钱包/恢复钱包的界面。

由于我是初次使用,所以点击创建钱包。

④ 设置pin码4-8位

⑤ 选择助记词数量12位或24位

⑥ 拿出油性笔和助记词板,抄写助记词

⑦ 抄写完毕,对助记词进行验证

⑧ 验证完毕,将自动创建钱包,大约需要2分钟

hypermate pro采用的是英飞凌cc eal6 的安全芯片,这在业内也是领先水平,如目前主流的ledgernanox其安全性为cc eal5 。

在这里多说一句,出于安全考虑非常不建议将其他设备生成的助记词直接导入硬件钱包使用,因为这样就失去了硬件钱包最本初的安全设想。

硬件钱包之所以安全,便是因为助记词是由安全芯片内全脱网离线随机生成而保证的。

到这里就完成了硬件钱包上的初始化工作,打开app链接硬件钱包。

进入hayperpay app,点击顶部“选择钱包”,选择“hypermate”并打开手机蓝牙

发现设备名为“hpyg2-hjin”的pro钱包

输入蓝牙配对码之后,钱包与手机app连接成功

<交易体验>

在初始化钱包之后,我们对这款钱包使用有了简单的了解。这是一款仅通过蓝牙传输进行通信的硬件钱包。

另外在钱包安全性上,hypermate pro采用的是英飞凌cc eal6 的安全芯片,加上真随机数发生器(rng)确保私钥生成的唯一性。币种上对btc、eth、ltc、eos等数十条主流公链的支持,并且对erc20、trc20、qrc20全系支持,可以输入相应代币合约地址直接添加。

而且和前一代的hypermate g相比较,pro支持指纹解锁,录入指纹后可以减少pin码手输的时间,使用钱包转账时体验更好。下面我们录入一下指纹,钱包开机的情况下,打开前面配对完成的手机app,点击顶部更多,找到管理硬件指纹。

录入流程比较简单,只需蓝牙连接钱包,大概轻触五次即可完成指纹录入。

下面我们就以trx作为测试货币,来体验一下这款钱包的资产收发功能。

首先打开手机app币种中添加trx代码,这时候需要蓝牙连接硬件钱包获取trx的地址。

点击trx,找到trx的收款地址(或二维码)。从交易所或其他钱包将trx转入钱包。

发送币种,还是在app中点击需要转帐的币种,点击trx,点击下方转帐,粘贴收款地址或扫描二维码导入地址,输入币种数量后点击转帐。

这时会提示在硬件钱包验证指纹,二次确认,在硬件钱包端仔细核对转账信息无误后点击ok,交易将直接广播出去。

<简评时刻>

hypermate pro在测评中体验下来,可以感受到交互较为人性化,而且与其自家的hyperpay app深度整合。hyperpay是一款集托管理财钱包、去中心化自管钱包、hypermate硬件钱包、共管钱包于一体的多生态顶级数字资产钱包。

而hypermate pro硬件钱包在固件上可升级,未来支持币种可能更多,这也符合在区块链行业迅猛发展下的迭代需求。

在特色功能上,除了个人使用的单签钱包外,hypermate pro其实还是一款支持硬件级多签的冷钱包,任何一笔资金转出都受控于多个硬件钱包签名(最多7人),这块功能也足以满足对于资产有多签需求的企业用户。

hypermate系列钱包现已上架链作商城,觉得这款钱包不错的朋友可以在商城下单购买,原封正品包邮到家。

在这轮牛市中你又期待有什么更多链圈好物上市呢?我们始终相信随着资产安全行业的发展,会涌现出更多类型、操作体验更富科技感的产品,而你也一定能找到适合自己的钱包保障自己的资产安全。

感谢hyperpay与链作商城本期送测的hypermate pro,本期测评就到这啦。

hyperpay钱包下载链接(点击阅读原文,一键下载):https://hyperpay.tech/

评测新鲜好物,尽在巴比特和链节点,下一期想让我们带来什么产品?等你留言哦~

出自当贝优选 作者青春向荣

既然要评测一款产品,当然要先去了解她,维迪声e3的制造商是维尔晶科技公司,成立于2009年以研发蓝牙应用产品为主。2009年,正是国家大力推广和发展高新技术的一年,很多蓝牙设备制造商也在彼时蓬勃成长。2009年距今也有十个年头了,在这么一个科技爆炸日新月异的时代,维迪声 e3四核双动圈入耳式耳机,便是维尔晶科技公司十年磨一剑的科技展现。国产耳机可以在提升科技的同时,更容易的压低成本。那么,动听的音质与亲民的价格,真的只能二选一吗?从不虚张声势的良心评测马上展开!

?

?

?

一 产品开箱

?

论包装,维迪声 e3真是省料到家了,只有一个半封口的塑料袋,没有纸板盒,甚至没有塑封膜……

?

推拉式的腰封,把产品盒推出来,嗯,全黑配色加橘红色字体,盒子体积不小,与魅族系列差不多大。

打开盒子,正面直接是收纳包……产品没有展示窗,配件没有固定位,还是省料的味道……

文章九游会ag官方网站的版权声明:除非注明,否则均为苗坤旺离型膜原创文章,转载或复制请以超链接形式并注明出处。

发表评论

快捷回复: 表情:
applausebadlaughcoffeefabulousfacepalmfecesfrownheyhainsidiouskeepfightingnoprobpigheadshockedslapsocialsweattolaughwatermelonwittywowyeahyellowdog
评论列表 (暂无评论,6人围观)

还没有评论,来说两句吧...

微信二维码
微信二维码
支付宝二维码
网站地图