热门标签 | 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

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



推荐阅读
  • STL迭代器的种类及其功能介绍
    本文介绍了标准模板库(STL)定义的五种迭代器的种类和功能。通过图表展示了这几种迭代器之间的关系,并详细描述了各个迭代器的功能和使用方法。其中,输入迭代器用于从容器中读取元素,输出迭代器用于向容器中写入元素,正向迭代器是输入迭代器和输出迭代器的组合。本文的目的是帮助读者更好地理解STL迭代器的使用方法和特点。 ... [详细]
  • Java容器中的compareto方法排序原理解析
    本文从源码解析Java容器中的compareto方法的排序原理,讲解了在使用数组存储数据时的限制以及存储效率的问题。同时提到了Redis的五大数据结构和list、set等知识点,回忆了作者大学时代的Java学习经历。文章以作者做的思维导图作为目录,展示了整个讲解过程。 ... [详细]
  • YOLOv7基于自己的数据集从零构建模型完整训练、推理计算超详细教程
    本文介绍了关于人工智能、神经网络和深度学习的知识点,并提供了YOLOv7基于自己的数据集从零构建模型完整训练、推理计算的详细教程。文章还提到了郑州最低生活保障的话题。对于从事目标检测任务的人来说,YOLO是一个熟悉的模型。文章还提到了yolov4和yolov6的相关内容,以及选择模型的优化思路。 ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • Redis底层数据结构之压缩列表的介绍及实现原理
    本文介绍了Redis底层数据结构之压缩列表的概念、实现原理以及使用场景。压缩列表是Redis为了节约内存而开发的一种顺序数据结构,由特殊编码的连续内存块组成。文章详细解释了压缩列表的构成和各个属性的含义,以及如何通过指针来计算表尾节点的地址。压缩列表适用于列表键和哈希键中只包含少量小整数值和短字符串的情况。通过使用压缩列表,可以有效减少内存占用,提升Redis的性能。 ... [详细]
  • Givenasinglylinkedlist,returnarandomnode'svaluefromthelinkedlist.Eachnodemusthavethe s ... [详细]
  • 模板引擎StringTemplate的使用方法和特点
    本文介绍了模板引擎StringTemplate的使用方法和特点,包括强制Model和View的分离、Lazy-Evaluation、Recursive enable等。同时,还介绍了StringTemplate语法中的属性和普通字符的使用方法,并提供了向模板填充属性的示例代码。 ... [详细]
  • Python教学练习二Python1-12练习二一、判断季节用户输入月份,判断这个月是哪个季节?3,4,5月----春 ... [详细]
  • 在本教程中,我们将看到如何使用FLASK制作第一个用于机器学习模型的RESTAPI。我们将从创建机器学习模型开始。然后,我们将看到使用Flask创建AP ... [详细]
  • 怀疑是每次都在新建文件,具体代码如下 ... [详细]
  • OpenMap教程4 – 图层概述
    本文介绍了OpenMap教程4中关于地图图层的内容,包括将ShapeLayer添加到MapBean中的方法,OpenMap支持的图层类型以及使用BufferedLayer创建图像的MapBean。此外,还介绍了Layer背景标志的作用和OMGraphicHandlerLayer的基础层类。 ... [详细]
  • #define_CRT_SECURE_NO_WARNINGS#includelist.h#includevoidSListInit(PNode*pHead ... [详细]
  • 花瓣|目标值_Compose 动画边学边做夏日彩虹
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了Compose动画边学边做-夏日彩虹相关的知识,希望对你有一定的参考价值。引言Comp ... [详细]
  • 颜色迁移(reinhard VS welsh)
    不要谈什么天分,运气,你需要的是一个截稿日,以及一个不交稿就能打爆你狗头的人,然后你就会被自己的才华吓到。------ ... [详细]
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社区 版权所有