iis服务器助手广告
返回顶部
首页 > 资讯 > 精选 >PyQt5 PySide2触摸测试功能如何实现
  • 625
分享到

PyQt5 PySide2触摸测试功能如何实现

2023-07-05 20:07:42 625人浏览 独家记忆
摘要

这篇文章主要介绍“PyQt5 PySide2触摸测试功能如何实现”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“PyQt5 PySide2触摸测试功能如何实现”文章能帮助大家解决问

这篇文章主要介绍“PyQt5 PySide2触摸测试功能如何实现”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“PyQt5 PySide2触摸测试功能如何实现”文章能帮助大家解决问题。

一、前言

该测试功能是linux产测软件的一个子功能,主要涉及:
140行代码
PySide2的Event、信号和槽、QLabel,QWidget。
QLabel实现每个小框,QWidget作为主界面

另外发现PySide2和Pyqt5没啥大区别,只要把import的包改好,代码是可以两方通用的。

手指滑动,手指坐标所在方块的颜色发生改变,如果手指划出方块区域,则所有已染色方块清空颜色,松开事件同理

实现效果:PyQt5 PySide2触摸测试功能如何实现

二、实现思路:

使用GridLayout,绘制四周方格,方格初始化为黄色,点击到则为红色

重写Label,对每个label定义x,y表示所在gridlayout中的位置
如x = 1,y = 3表示label位于第一行第三列,left,right,top,bottom表示方格四条边的实际坐标

重写moveEvent事件和ReleaseEvent事件,
moveEvnet事件:
每次鼠标移动即触发moveEvent,则发出已经定义的信号move_signal
move_singal.connect(self.manager_touch)
manager_touch是判断当前鼠标是否位于方格内,如果在方格内则染色,如果鼠标划入空白部分,则清空所有方块颜色
另对染色label进行计数,如果达到绘制的label的总数量则发出信号返回测试通过

ReleaseEvent事件:
鼠标左键松开(对应手指离开屏幕)即触发ReleaseEvent,则清空已染色方块,另把已染色方块数量清零

clear_sources: 在退出页面前应将保存label的列表即self.touch_labels清空,否则重启该界面会报错

三、实现代码:

sytle.py

COLOR_RED = "color: rgb(255, 255, 255); background-color: #FF0000;"COLOR_YELLOW = "color: rgb(255, 255, 255); background-color: #FFFF00;"COLOR_WHITE = "color: rgb(255, 255, 255); background-color: #FFFFFF;"COLOR_BLACK = "color: rgb(255, 255, 255); background-color: #000000;"COLOR_GREEN = "color: rgb(255, 255, 255); background-color: #00FF00;"COLOR_BLUE = "color: rgb(255, 255, 255); background-color:  #0000FF;"COLOR_PURPLE = "color: rgb(255, 255, 255); background-color: #871F78;"

main.py

import sysfrom functools import partialfrom PySide2 import QtWidgetsfrom PySide2.QtCore import Qt, Signalfrom PySide2.QtGui import QCursorfrom PySide2.QtWidgets import QGridLayout, QPushButton, QWidget, QApplicationimport styleclass TouchLabel(QtWidgets.QLabel):    def __init__(self, i, j, top, bottom, left, right, target, parent=None):        super(TouchLabel, self).__init__(parent)        self.setStyleSheet(style.COLOR_YELLOW)        self.flag = False  # 如果被滑过则置为True        self.target = target        self.x = i  # x,y 代表在gridLayout中的位置        self.y = j        self.flag = False        self.left = left        self.right = right        self.top = top        self.bottom = bottomclass TouchWidget(QWidget):    touch_labels = []  # 存储label的列表    sum_moved_labels = 0    move_signal = Signal()    out_signal = Signal()    release_signal = Signal()    def __init__(self):        super().__init__()        self.sum_labels = 0  # 统计染色的方块个数        self.target = 0        print("start TouchWidget")        self.setWindowFlags(Qt.FramelessWindowHint)        self.showFullScreen()        self.init_parameters()  # 初始化gridlayout的参数        print("绘制的按钮个数为:" + str(self.target))    def init_parameters(self):        self.layout = QGridLayout(self)        self.layout.setMargin(0)  # 设置widget离窗口的距离        self.layout.setSpacing(0)  # 设置控件间距        self.row = 10  # 纵向的按钮数量        self.column = 10  # 横向的按钮数量        desktop = QtWidgets.QApplication.desktop()        global label_width, label_height        label_width = desktop.width() / self.column  # 列宽        label_height = desktop.height() / self.row  # 行高        self.target = self.row * 2 + self.column * 2 - 4        self.touch_labels.clear()        self.init_touch_label(self.row, self.column, label_height, label_width)        self.add_touch_label(label_width, label_height)    def init_touch_label(self, row, column, label_height, label_width):        desktop = QtWidgets.QApplication.desktop()        height = desktop.height()        width = desktop.width()        for i in range(row):            for j in range(column):                if i == 0 and j == 0:                    label = TouchLabel(i, j, 0, label_height, 0, label_width, self.target)                    self.touch_labels.append(label)                elif i == 0 and j != 0:                    label = TouchLabel(i, j, 0, label_height, j * label_width, (j + 1) * label_width, self.target)                    self.touch_labels.append(label)                elif i != 0 and j == 0:                    label = TouchLabel(i, j, i * label_height, (i + 1) * label_height, 0, label_width, self.target)                    self.touch_labels.append(label)                elif i == row - 1 and j != 0:                    label = TouchLabel(i, j, height - label_height, height, j * label_width, (j + 1) * label_width,                                       self.target)                    self.touch_labels.append(label)                elif j == column - 1 and i != 0:                    label = TouchLabel(i, j, i * label_height, (i + 1) * label_height, width - label_width, width,                                       self.target)                    self.touch_labels.append(label)    def add_touch_label(self, label_width, label_height):        for label in self.touch_labels:            self.layout.addWidget(label, label.x, label.y, 1, 1)        nopass_quit_btn = QPushButton("如果测试不通过,点击此按钮退出")        nopass_quit_btn.setMinimumSize(label_width, label_height)        self.layout.addWidget(nopass_quit_btn, self.row / 2 - 1, self.column / 2 - 1, 3, 3)        nopass_quit_btn.clicked.connect(partial(self.on_result, "TEST NOT PASS"))        self.move_signal.connect(self.manager_touch)        self.out_signal.connect(partial(self.on_result, "TEST PASS"))        self.release_signal.connect(self.clear_label_status)    def manager_touch(self):        desktop = QtWidgets.QApplication.desktop()        frontier_top = label_height        frontier_bottom = desktop.height() - label_height        frontier_left = label_width        frontier_right = desktop.width() - label_width        x = QCursor.pos().x()        y = QCursor.pos().y()        if frontier_left <= x <= frontier_right and frontier_top <= y <= frontier_bottom:            self.clear_label_status()            print("手指划出边界,清空所有方块颜色")        for label in self.touch_labels:            if label.left <= x <= label.right and label.top <= y <= label.bottom:                if label.flag:                    continue                else:                    label.setStyleSheet(style.COLOR_RED)                    TouchWidget.sum_moved_labels += 1                    label.flag = True            if TouchWidget.sum_moved_labels == self.target:                self.out_signal.emit()    def clear_label_status(self):        for label in self.touch_labels:            label.setStyleSheet(style.COLOR_YELLOW)            label.flag = False        TouchWidget.sum_moved_labels = 0    def clear_sources(self):        TouchWidget.sum_moved_labels = 0        self.touch_labels.clear()        self.sum_moved_labels = 0        self.target = 0    def mouseMoveEvent(self, event):        self.move_signal.emit()    def mouseReleaseEvent(self, event):        self.release_signal.emit()        print("释放焦点,清空所有方块颜色")    def on_result(self, ret):        self.clear_sources()        print(ret)        self.close()if __name__ == '__main__':    app = QApplication()    widget = TouchWidget()    widget.show()    sys.exit(app.exec_())

关于“PyQt5 PySide2触摸测试功能如何实现”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识,可以关注编程网精选频道,小编每天都会为大家更新不同的知识点。

--结束END--

本文标题: PyQt5 PySide2触摸测试功能如何实现

本文链接: https://www.lsjlt.com/news/355096.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • PyQt5 PySide2触摸测试功能如何实现
    这篇文章主要介绍“PyQt5 PySide2触摸测试功能如何实现”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“PyQt5 PySide2触摸测试功能如何实现”文章能帮助大家解决问...
    99+
    2023-07-05
  • PyQt5PySide2触摸测试功能的实现代码
    目录一、前言二、实现思路:三、实现代码:一、前言 该测试功能是Linux产测软件的一个子功能,主要涉及:140行代码PySide2的Event、信号和槽、QLabel,QWidget...
    99+
    2023-05-14
    PyQt5 PySide2 触摸测试 PyQt5 PySide2
  • jQuery如何实现触摸事件
    这篇文章主要为大家展示了“jQuery如何实现触摸事件”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“jQuery如何实现触摸事件”这篇文章吧。触摸事件//&nb...
    99+
    2024-04-02
  • 基于Angular.js如何实现触摸滑动动画
    小编给大家分享一下基于Angular.js如何实现触摸滑动动画,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!先上图:这个主要用到...
    99+
    2024-04-02
  • Hbase如何实现性能测试
    这篇文章给大家分享的是有关Hbase如何实现性能测试的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。之前测试过HBASE的参数对性能影响,今天的测试主要针对写吞吐量,通过对比不同客户端的数量,以及插入量,来看看HB...
    99+
    2023-06-03
  • Android如何实现多点触控功能
    本篇内容介绍了“Android如何实现多点触控功能”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!使用了Android的系统API实现了多点触...
    99+
    2023-06-30
  • Vue如何实现自动触发功能
    目录实现自动触发功能自定义指令实现自动点击事件1.若是没有v-for循环2.若是有v-for循环实现自动触发功能 今天在项目中遇到一个问题,就是当页面加载的时候,我希望某个元素通过点...
    99+
    2024-04-02
  • springboot vue接口测试定义编辑功能如何实现
    本文小编为大家详细介绍“springboot vue接口测试定义编辑功能如何实现”,内容详细,步骤清晰,细节处理妥当,希望这篇“springboot vue接口测试定义编辑功能如何实现”文章能帮助大家解决疑惑,下面跟着小...
    99+
    2023-06-30
  • PyQt5如何实现数据的增删改查功能
    这篇文章主要介绍“PyQt5如何实现数据的增删改查功能”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“PyQt5如何实现数据的增删改查功能”文章能帮助大家解决问题。话不多说,还是先来梳理一下需要的第三...
    99+
    2023-06-29
  • 测试人员如何提高API功能测试效率?
    API,即:应用编程接口,就是软件系统不同组成部分衔接的约定。由于近年来软件的规模日益庞大,常常需要把复杂的系统划分成小的组成部分,编程接口的设计十分重要。程序设计的实践中,编程接口的设计首先要使软件系统的职责得到合理划分。良好的接口设计可...
    99+
    2023-06-04
  • 数据库功能测试如何做
    数据库功能测试是一种用于验证数据库系统的功能是否按照预期工作的测试方法。以下是进行数据库功能测试的步骤: 确定测试目标:确定需要...
    99+
    2023-10-21
    数据库
  • Flex程序如何实现性能测试
    这篇文章主要为大家展示了“Flex程序如何实现性能测试”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Flex程序如何实现性能测试”这篇文章吧。Flex程序性能测试Adobe的Flex已经越来越流...
    99+
    2023-06-17
  • JBoss EJB CMP2如何实现性能测试
    这篇文章给大家分享的是有关JBoss EJB CMP2如何实现性能测试的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。测试环境操作系统:Win2000CPU:PIII733EBMemory:512MApplicat...
    99+
    2023-06-03
  • sql中触发器如何实现库存功能
    这篇文章主要为大家展示了“sql中触发器如何实现库存功能”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“sql中触发器如何实现库存功能”这篇文章吧。表1、入库表&...
    99+
    2024-04-02
  • 如何使用MongoDB实现数据的自动化测试功能
    如何使用MongoDB实现数据的自动化测试功能摘要:随着软件开发的不断发展,自动化测试已经成为了一项非常重要的工作。对于使用MongoDB作为后台数据库的项目来说,如何实现数据的自动化测试功能尤为重要。本文将介绍如何使用MongoDB来实现...
    99+
    2023-10-22
    MongoDB自动化测试 数据测试实现 使用MongoDB进行自动化测试
  • 如何理解Angular单元测试中事件触发的实现
    如何理解Angular单元测试中事件触发的实现,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。导读这篇文章主要介绍了Angular单元测试之事件触发的实现,文中通...
    99+
    2023-06-04
  • 如何实现Android触摸事件分发的原理分析
    如何实现Android触摸事件分发的原理分析,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。一:前言最近在学Android的触摸事件分发,我觉得网上说的太杂太乱,而且有很多博客都...
    99+
    2023-06-26
  • win7笔记本触摸板如何实现滚屏功能在浏览网页可以翻页和滚动
    现在用笔记本的用户已经越来越普遍了,而触摸板是每一台电脑都会必备的,想必大家对触摸板应该都很熟悉吧,当我们没有安装外接键盘的时候就是用触摸板代替鼠标移动操作的,可是有不少用户发现不管在笔记本触摸板上面如何移动,在浏览网页...
    99+
    2023-06-06
    win7 笔记本 触摸板 滚屏 功能
  • vue如何实现一个带有触摸屏支持的3D球
    这篇文章主要讲解了“vue如何实现一个带有触摸屏支持的3D球”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“vue如何实现一个带有触摸屏支持的3D球”吧!准备工作首先,我们需要使用Vue CL...
    99+
    2023-07-05
  • 如何利用原生JS实现触摸滑动监听事件
    前言 今天写一个小Demo,有个地方涉及到了左滑右滑的逻辑,本来想着用插件来着,但是想到自己好久没用原生JS写滑动的监听了,所以试着用原生JS来实现了一下,毕竟温故而知新嘛,同时做...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作