热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

pythonpyqt5界面开发实例_python高级:10.拖动式界面开发part2

0.前言如果可以的话,请先关注(专栏和账号),然后点赞和收藏,最后学习和进步。你的支持是我继续写下去的最大动力
b8815e35e9b53e108b82f985bb71fe6c.png

0.前言

如果可以的话,请先关注(专栏和账号),然后点赞和收藏,最后学习和进步。你的支持是我继续写下去的最大动力,个人定当倾囊而送,不负众望。谢谢!!!

1.前提

基于win10专业版64位系统+64位jdk1.8+64位python3.6.5+社区版pycharm2018.1.3+unittest+selenium3.141.0。

要学好自动化测试,我们先从python语言基础开始学习,一步一个脚印,欲速则不达哦!

2.随机抽人项目

1)项目需求

a.所有人名存放在txt文件中;b.每次随机抽取一个不重复(即没有抽过的)人名并展示;c.所有人抽过之后给出选择提示,是继续下一轮从新抽取还是结束程序运行。

2)界面原型

d43739d346a24d1ed5d792d48a038337.png
c5162d6d7f349531c9c3398771aa7976.png
de1748f152ca4cc77a7ecc48af53f704.png

3)业务流程图

f0b390da57481d01c91b960408dcf1f3.png

4)无界面源码

read_file.py文件:

class ReadFile:def read_txt(self,filename):with open(filename,'r') as f:result =f.read().splitlines()return resultif __name__ == '__main__':result = ReadFile().read_txt("../data/students.txt")print(result)

choose_poople.py文件:

from test1903.RandomChoose.method.read_file import ReadFile
from random import randintclass ChoosePeople:def choosePeolpe(self):rf = ReadFile()list1 = rf.read_txt("./data/students.txt")#存储txt文件当中的所有学生姓名list2 = []#用来存储已经抽过的学员,还可以用来判断随机抽的学员是否抽过了while True:choose = input("1.随机选择一人,0.退出系统,请选择:")if choose == '1':if len(list2) != len(list1):while True:index = randint(0,len(list1) - 1)#获取一个随机下标if list1[index] not in list2:#盘对学员是否抽过list2.append(list1[index])#将没有抽过的学员加入list2print("幸运儿是:" + list1[index])#获得一个随机下标来表示一个随机学员姓名breakelse:continueelse:print("所有学生都抽过了!")list2.clear()while True:choose2 = input("1.重新开始,0.退出系统,请选择:")if choose2 == '1':breakelif choose2 == '0':exit()else:print("输入有误,请输入1或0!")continue#可加可不加,因为下面没有代码了elif choose == '0':exit()#退出结束程序运行else:print("您的输入有误!")
if __name__ == '__main__':cp = ChoosePeople()cp.choosePeolpe()

运行效果:

2c601b76d8fced53d0a07fbcc9b35fa7.png

5)开发界面

代码写的再好,没有界面总感觉少点儿什么。。。。。。

打开QtDesigner设计界面:

e50f542e162f71db8cc6865c0d3c34c4.png
97fe7fb31daad11e9433a4572ca3aa08.png
3d290491008350733e08526f954fea1c.png
8d2ddd3dd65974e2e05d0bc693105480.png

保存后生成一个*.ui文件。

选中ui文件,然后点pyUIC自动生成界面模块文件:

0e9aee7f858a5ccec8da7321d6f71a24.png
efdab5a963e86a3d36590111ec26b161.png

项目目录结构:

326ea89f2108cf238b615fdf35f09c7a.png

源码贴出来,大家可以参考下:

# -*- coding: utf-8 -*-# Form implementation generated from reading ui file 'people.ui'
#
# Created by: PyQt5 UI code generator 5.11.3
#
# WARNING! All changes made in this file will be lost!from PyQt5 import QtCore, QtGui, QtWidgetsclass Ui_Dialog(object):def setupUi(self, Dialog):Dialog.setObjectName("Dialog")Dialog.resize(279, 242)self.textBrowser_result = QtWidgets.QTextBrowser(Dialog)self.textBrowser_result.setGeometry(QtCore.QRect(10, 10, 256, 192))font = QtGui.QFont()font.setFamily("华文行楷")font.setPointSize(12)self.textBrowser_result.setFont(font)self.textBrowser_result.setObjectName("textBrowser_result")self.pushButton_start = QtWidgets.QPushButton(Dialog)self.pushButton_start.setGeometry(QtCore.QRect(40, 210, 61, 21))self.pushButton_start.setObjectName("pushButton_start")self.pushButton_close = QtWidgets.QPushButton(Dialog)self.pushButton_close.setGeometry(QtCore.QRect(180, 210, 61, 21))self.pushButton_close.setObjectName("pushButton_close")self.retranslateUi(Dialog)QtCore.QMetaObject.connectSlotsByName(Dialog)def retranslateUi(self, Dialog):_translate = QtCore.QCoreApplication.translateDialog.setWindowTitle(_translate("Dialog", "幸运儿"))self.pushButton_start.setText(_translate("Dialog", "开始"))self.pushButton_close.setText(_translate("Dialog", "关闭"))

程序入口执行文件源码:

from test1903.RandomChoose.UI.people import Ui_Dialog
import sys
from threading import Thread
from PyQt5 import QtWidgets, QtGui
from test1903.RandomChoose.method.read_file import ReadFile
from random import randintclass main_class(QtWidgets.QMainWindow,Ui_Dialog):def __init__(self):rf = ReadFile()self.name_list1 = rf.read_txt('./data/students.txt') # 获取所有学生姓名,以列表的形式返回给name_list1self.name_list2 = [] # 用于存储抽过的人QtWidgets.QMainWindow.__init__(self)Ui_Dialog.__init__(self)# 添加背景palette = QtGui.QPalette()icon = QtGui.QPixmap(r'./UI/bg.png')palette.setBrush(self.backgroundRole(), QtGui.QBrush(icon))self.setPalette(palette)self.setupUi(self)self.begin()#开始按钮def start_button(self):self.pushButton_start.clicked.connect(self.random_people)def random_people(self):if len(self.name_list1) != len(self.name_list2):while True:index = randint(0,len(self.name_list1) - 1)#随机获取一个学生的下标if self.name_list1[index] not in self.name_list2:self.name_list2.append(self.name_list1[index])self.textBrowser_result.clear()#先清空self.textBrowser_result.append("幸运儿是:%s" %(self.name_list1[index]))#在空间中显示对应的抽取结果breakelse:continueelse:self.textBrowser_result.clear() # 先清空self.textBrowser_result.append("所有学生都抽过了!") # 在空间中显示对应的抽取结果self.name_list2.clear()#关闭按钮def close_button(self):self.pushButton_close.clicked.connect(self.close)def begin(self):t1 = Thread(target=self.start_button)t1.setDaemon(True)t1.start()Thread(target=self.close_button).start()if __name__ == '__main__':# 每一pyqt5应用程序必须创建一个应用程序对象。sys.argv参数是一个列表,从命令行输入参数。app = QtWidgets.QApplication(sys.argv)dialog = main_class()#实例化# 显示在屏幕上dialog.show()# 系统exit()方法确保应用程序干净的退出sys.exit(app.exec())

运行效果:

06a5f5c4df0101f5f98e017b153a2c3a.png
ae2d42741c3d205cc2764ad07fedbf5e.png
c0350378a96bf2b5e6092de63354955c.png

说明:本章节掌握之后,大家就可以自行开发一些简单的带界面的测试辅助小工具了,满满的收获感哈!



推荐阅读
  • Android目录遍历工具 | AppCrawler自动化测试进阶(第二部分):个性化配置详解
    终于迎来了“足不出户也能为社会贡献力量”的时刻,但有追求的测试工程师绝不会让自己的生活变得乏味。与其在家消磨时光,不如利用这段时间深入研究和提升自己的技术能力,特别是对AppCrawler自动化测试工具的个性化配置进行详细探索。这不仅能够提高测试效率,还能为项目带来更多的价值。 ... [详细]
  • PyQt5 QTextEdit:深入解析Python中多功能GUI库的应用与实现
    本文详细探讨了 PyQt5 中 QTextEdit 组件在 Python 多功能 GUI 库中的应用与实现。PyQt5 是 Qt 框架的 Python 绑定,提供了超过 620 个类和 6000 个函数及方法,广泛应用于跨平台应用程序开发。QTextEdit 作为其中的重要组件,支持丰富的文本编辑功能,如富文本格式、文本高亮和自定义样式等。PyQt5 的流行性不仅在于其强大的功能,还在于其易用性和灵活性,使其成为开发复杂用户界面的理想选择。 ... [详细]
  • 大类|电阻器_使用Requests、Etree、BeautifulSoup、Pandas和Path库进行数据抓取与处理 | 将指定区域内容保存为HTML和Excel格式
    大类|电阻器_使用Requests、Etree、BeautifulSoup、Pandas和Path库进行数据抓取与处理 | 将指定区域内容保存为HTML和Excel格式 ... [详细]
  • 属性类 `Properties` 是 `Hashtable` 类的子类,用于存储键值对形式的数据。该类在 Java 中广泛应用于配置文件的读取与写入,支持字符串类型的键和值。通过 `Properties` 类,开发者可以方便地进行配置信息的管理,确保应用程序的灵活性和可维护性。此外,`Properties` 类还提供了加载和保存属性文件的方法,使其在实际开发中具有较高的实用价值。 ... [详细]
  • 本文介绍了一种自定义的Android圆形进度条视图,支持在进度条上显示数字,并在圆心位置展示文字内容。通过自定义绘图和组件组合的方式实现,详细展示了自定义View的开发流程和关键技术点。示例代码和效果展示将在文章末尾提供。 ... [详细]
  • 使用 ListView 浏览安卓系统中的回收站文件 ... [详细]
  • [转]doc,ppt,xls文件格式转PDF格式http:blog.csdn.netlee353086articledetails7920355确实好用。需要注意的是#import ... [详细]
  • 本教程详细介绍了如何使用 Spring Boot 创建一个简单的 Hello World 应用程序。适合初学者快速上手。 ... [详细]
  • 如何在Java中使用DButils类
    这期内容当中小编将会给大家带来有关如何在Java中使用DButils类,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。D ... [详细]
  • Python 3 Scrapy 框架执行流程详解
    本文详细介绍了如何在 Python 3 环境下安装和使用 Scrapy 框架,包括常用命令和执行流程。Scrapy 是一个强大的 Web 抓取框架,适用于数据挖掘、监控和自动化测试等多种场景。 ... [详细]
  • 在使用 Qt 进行 YUV420 图像渲染时,由于 Qt 本身不支持直接绘制 YUV 数据,因此需要借助 QOpenGLWidget 和 OpenGL 技术来实现。通过继承 QOpenGLWidget 类并重写其绘图方法,可以利用 GPU 的高效渲染能力,实现高质量的 YUV420 图像显示。此外,这种方法还能显著提高图像处理的性能和流畅性。 ... [详细]
  • 开发笔记:深入解析Android自定义控件——Button的72种变形技巧
    开发笔记:深入解析Android自定义控件——Button的72种变形技巧 ... [详细]
  • 本次发布的Qt音乐播放器2.0版本在用户界面方面进行了细致优化,提升了整体的视觉效果和用户体验。尽管核心功能与1.0版本保持一致,但界面的改进使得操作更加直观便捷,为用户带来了更为流畅的使用体验。此外,我们还对部分细节进行了微调,以确保软件的稳定性和性能得到进一步提升。 ... [详细]
  • Android 图像色彩处理技术详解
    本文详细探讨了 Android 平台上的图像色彩处理技术,重点介绍了如何通过模仿美图秀秀的交互方式,利用 SeekBar 实现对图片颜色的精细调整。文章展示了具体的布局设计和代码实现,帮助开发者更好地理解和应用图像处理技术。 ... [详细]
  • APKAnalyzer(1):命令行操作体验与功能解析
    在对apkChecker进行深入研究后,自然而然地关注到了Android Studio中的APK分析功能。将APK文件导入IDE中,系统会自动解析并展示其中各类文件的详细信息。官方文档提供了详细的命令行工具使用指南,帮助开发者快速上手。本文以一个RecyclerView的Adapter代理开源库为例,探讨了如何利用这些工具进行高效的APK分析。 ... [详细]
author-avatar
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有