最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

PyQt5 PySide2 觸摸測試功能的實(shí)現(xiàn)代碼

 更新時(shí)間:2023年04月03日 10:47:02   作者:cqust_qilin02811  
這篇文章主要介紹了PyQt5 PySide2 觸摸測試功能的實(shí)現(xiàn),本文通過示例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

一、前言

該測試功能是Linux產(chǎn)測軟件的一個(gè)子功能,主要涉及:
140行代碼
PySide2的Event、信號(hào)和槽、QLabel,QWidget。
QLabel實(shí)現(xiàn)每個(gè)小框,QWidget作為主界面

另外發(fā)現(xiàn)PySide2和Pyqt5沒啥大區(qū)別,只要把import的包改好,代碼是可以兩方通用的。

手指滑動(dòng),手指坐標(biāo)所在方塊的顏色發(fā)生改變,如果手指劃出方塊區(qū)域,則所有已染色方塊清空顏色,松開事件同理

實(shí)現(xiàn)效果:

請?zhí)砑訄D片描述

請?zhí)砑訄D片描述

二、實(shí)現(xiàn)思路:

1.使用GridLayout,繪制四周方格,方格初始化為黃色,點(diǎn)擊到則為紅色

2.重寫Label,對每個(gè)label定義x,y表示所在gridlayout中的位置
如x = 1,y = 3表示label位于第一行第三列,left,right,top,bottom表示方格四條邊的實(shí)際坐標(biāo)

3.重寫moveEvent事件和ReleaseEvent事件,
moveEvnet事件:
每次鼠標(biāo)移動(dòng)即觸發(fā)moveEvent,則發(fā)出已經(jīng)定義的信號(hào)move_signal
move_singal.connect(self.manager_touch)
manager_touch是判斷當(dāng)前鼠標(biāo)是否位于方格內(nèi),如果在方格內(nèi)則染色,如果鼠標(biāo)劃入空白部分,則清空所有方塊顏色
另對染色label進(jìn)行計(jì)數(shù),如果達(dá)到繪制的label的總數(shù)量則發(fā)出信號(hào)返回測試通過

ReleaseEvent事件:
鼠標(biāo)左鍵松開(對應(yīng)手指離開屏幕)即觸發(fā)ReleaseEvent,則清空已染色方塊,另把已染色方塊數(shù)量清零

4.clear_sources: 在退出頁面前應(yīng)將保存label的列表即self.touch_labels清空,否則重啟該界面會(huì)報(bào)錯(cuò)

三、實(shí)現(xiàn)代碼:

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 sys
from functools import partial
from PySide2 import QtWidgets
from PySide2.QtCore import Qt, Signal
from PySide2.QtGui import QCursor
from PySide2.QtWidgets import QGridLayout, QPushButton, QWidget, QApplication
import style
class 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 = bottom


class TouchWidget(QWidget):
    touch_labels = []  # 存儲(chǔ)label的列表
    sum_moved_labels = 0
    move_signal = Signal()
    out_signal = Signal()
    release_signal = Signal()

    def __init__(self):
        super().__init__()
        self.sum_labels = 0  # 統(tǒng)計(jì)染色的方塊個(gè)數(shù)
        self.target = 0
        print("start TouchWidget")
        self.setWindowFlags(Qt.FramelessWindowHint)
        self.showFullScreen()
        self.init_parameters()  # 初始化gridlayout的參數(shù)
        print("繪制的按鈕個(gè)數(shù)為:" + str(self.target))

    def init_parameters(self):
        self.layout = QGridLayout(self)
        self.layout.setMargin(0)  # 設(shè)置widget離窗口的距離
        self.layout.setSpacing(0)  # 設(shè)置控件間距
        self.row = 10  # 縱向的按鈕數(shù)量
        self.column = 10  # 橫向的按鈕數(shù)量
        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("如果測試不通過,點(diǎn)擊此按鈕退出")
        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("釋放焦點(diǎn),清空所有方塊顏色")

    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_())

到此這篇關(guān)于PyQt5 PySide2 觸摸測試功能的實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)PyQt5 PySide2 觸摸測試內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python如何快速生成本項(xiàng)目的requeirments.txt實(shí)現(xiàn)

    Python如何快速生成本項(xiàng)目的requeirments.txt實(shí)現(xiàn)

    本文主要介紹了Python如何快速生成本項(xiàng)目的requeirments.txt實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-03-03
  • Python數(shù)據(jù)可視化之用Matplotlib繪制常用圖形

    Python數(shù)據(jù)可視化之用Matplotlib繪制常用圖形

    Matplotlib能夠繪制折線圖、散點(diǎn)圖、柱狀圖、直方圖、餅圖. 我們需要知道不同的統(tǒng)計(jì)圖的意義,以此來決定選擇哪種統(tǒng)計(jì)圖來呈現(xiàn)我們的數(shù)據(jù),今天就帶大家詳細(xì)了解如何繪制這些常用圖形,需要的朋友可以參考下
    2021-06-06
  • 教你利用pygame模塊制作跳躍小球小游戲

    教你利用pygame模塊制作跳躍小球小游戲

    pygame是一個(gè)專門設(shè)計(jì)來進(jìn)行游戲開發(fā)設(shè)計(jì)的Python模塊,因?yàn)閿[脫了被低級(jí)語言(如機(jī)器語言和匯編語言)的束縛,使用起來非常的簡單,這篇文章主要給大家介紹了關(guān)于如何利用pygame模塊制作跳躍小球小游戲的相關(guān)資料,需要的朋友可以參考下
    2021-08-08
  • django將網(wǎng)絡(luò)中的圖片,保存成model中的ImageField的實(shí)例

    django將網(wǎng)絡(luò)中的圖片,保存成model中的ImageField的實(shí)例

    今天小編就為大家分享一篇django將網(wǎng)絡(luò)中的圖片,保存成model中的ImageField的實(shí)例,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-08-08
  • 詳解Python判定IP地址合法性的三種方法

    詳解Python判定IP地址合法性的三種方法

    這篇文章主要介紹了詳解Python判定IP地址合法性的三種方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-03-03
  • Python實(shí)現(xiàn)socket非阻塞通訊功能示例

    Python實(shí)現(xiàn)socket非阻塞通訊功能示例

    這篇文章主要介紹了Python實(shí)現(xiàn)socket非阻塞通訊功能,結(jié)合實(shí)例形式分析了Python使用socket模塊進(jìn)行非阻塞通訊的原理、多線程及客戶端、服務(wù)器端相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下
    2019-11-11
  • 詳解pytest傳遞參數(shù)的幾種方式

    詳解pytest傳遞參數(shù)的幾種方式

    本文主要介紹了詳解pytest傳遞參數(shù)的幾種方式,詳細(xì)的介紹了4種傳參方式,文中通過示例代碼介紹的非常詳細(xì),需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-03-03
  • Python將列表中的元素轉(zhuǎn)化為數(shù)字并排序的示例

    Python將列表中的元素轉(zhuǎn)化為數(shù)字并排序的示例

    今天小編就為大家分享一篇Python將列表中的元素轉(zhuǎn)化為數(shù)字并排序的示例,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-12-12
  • Django 用戶登陸訪問限制實(shí)例 @login_required

    Django 用戶登陸訪問限制實(shí)例 @login_required

    這篇文章主要介紹了Django 用戶登陸訪問限制實(shí)例 @login_required,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-05-05
  • Python+OpenCV實(shí)戰(zhàn)之利用?K-Means?聚類進(jìn)行色彩量化

    Python+OpenCV實(shí)戰(zhàn)之利用?K-Means?聚類進(jìn)行色彩量化

    這篇文章主要介紹了如何利用?K-Means?聚類進(jìn)行色彩量化,以減少圖像中顏色數(shù)量。文中的代碼具有一定的學(xué)習(xí)價(jià)值,感興趣的小伙伴可以關(guān)注一下
    2021-12-12

最新評(píng)論

大方县| 吕梁市| 甘南县| 彭阳县| 织金县| 文山县| 彰武县| 通州市| 文昌市| 新丰县| 梁山县| 宜昌市| 玉屏| 黄冈市| 平山县| 牡丹江市| 自贡市| 屯门区| 阿克苏市| 临海市| 勐海县| 霍山县| 台东县| 米泉市| 宁夏| 怀远县| 疏附县| 民丰县| 嵩明县| 沂水县| 西青区| 金堂县| 蚌埠市| 名山县| 西乌珠穆沁旗| 荥经县| 邯郸市| 德保县| 乌兰县| 奉节县| 天祝|