基于PyQt5的抽签软件设计与实现
基于PyQt5的抽签软件设计与实现
摘要:交叉检查中的检查对象抽签,要求不检查自己、不相互检查,该文阐述了基于PyQt5开发的交叉检查抽签软件,实现了交叉检查抽签中的特殊要求,提高了抽签的效率。
关键词:PyQt5;交叉检查;抽签
Python是一种语法简洁、功能强大的编程语言,它的应用范围很广,而GUI图形用户界面开发则是Python的一个非常重要的方向之一,PyQt5作为一个跨平台、简单易用、高效的GUI框架,将Python与Qt融为一体,PyQt5允许使用Python语言调用Qt库中的API,在保留了Qt高效率运行的同时,大大提高了开发效率[1]。本文基于PyQt5设计开发了一款抽签软件,主要用于各单位进行交叉检查抽签,具有一定的实用价值。
1.系统分析
软件主要用于各单位之间进行交叉检查抽签,为公平起见,设置两次抽签,即首先按照序列由各单位依次抽取抽签的顺序,然后再按抽签顺序依次抽取交叉检查的对象。其中有两个条件需要遵守:一是不能抽到自己本单位;二是不能抽到检查本单位的单位,防止相互检查。
女孩取什么名字好听
抽签之前,先按顺序录入参与抽签的单位。然后由各单位依次操作或由工作人员代替操作按钮“开始”和“停止”完成抽签,抽签过程中,屏幕随机滚动显示待抽签的内容,按下“停止”按钮后屏幕上显示的内容即为该单位所抽中内容。抽签完成后,可将抽签结果导出为文件。抽签主要流程如图1所示。
图1 抽签流程
2.系统实现
2.1 开发环境安装
本文使用的系统环境为Windows 7 64位,在已安装Python的基础上,在项目文件夹下使用命令创建虚拟环境:python -m venv venv。激活虚拟环境后,分别使用pip install PyQt5、pip install PyQt5-tools、pip install PyQt5designer命令安装相关Python库。
2.2软件GUI界面制作
QtDesigner是Qt提供的一个GUI辅助设计工具,它在很大程度上减轻了设计用户界面时的工作量,使Qt程序员能仅用鼠标拖动和编写少量代码就能够完成大部分用户界面的制作[2]。在虚拟环境目录venv下的Lib\site-packages\QtDesigner文件夹中,点击运行即可进行GUI界面制作。界面设计如图2所示。其中左侧列表用于显示当前抽签的单位及抽签结果,中间“单位X”为抽签过程中滚动显示的抽签对象,下方分别为“开始”、“停止”、“导出”三个按键。
图2 软件界面设计
先使用QtDesigner设计制作出软件界面的整体框架,得到draw.ui文件,然后使用命令将.ui文件转换为.py文件:pyuic5 -o draw.py draw.ui,转换后生成的代码如下:
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        size(1225, 910)
        alwidget = QtWidgets.QWidget(MainWindow)
        alwidget.setObjectName("centralwidget")
        self.startButton = QtWidgets.alwidget)
        self.startButton.setGeometry(QtCore.QRect(680, 620, 131, 51))
        font = QtGui.QFont()
        font.setFamily("隶书")
        font.setPointSize(20)
        self.startButton.setFont(font)
        self.startButton.setObjectName("startButton")
        ……
        self.label = QtWidgets.alwidget)
        self.label.setGeometry(QtCore.QRect(540, 340, 571, 201))
怎么幻化        font = QtGui.QFont()
        font.setFamily("黑体")
        font.setPointSize(110)
        self.label.setFont(font)
        self.label.setTextFormat(QtCore.Qt.AutoText)
        self.label.setAlignment(QtCore.Qt.AlignCenter)
        self.label.setObjectName("label")
        self.tableWidget = QtWidgets.alwidget)
        self.tableWidget.setGeometry(QtCore.QRect(30, 260, 331, 481))
        self.tableWidget.setRowCount(15)
        self.tableWidget.setColumnCount(3)
        self.tableWidget.setObjectName("tableWidget")
河南景点排行榜
2.3抽签功能的实现
积碳
(1)导入名单。将待抽签的单位写入文件,每一行一个单位,软件启动时读取写入列表name_list中,同时根据单位的个数生成相应的序号写入列表order_list中。相关代码如下:
    def setList(self):
        with open('') as listfile:
            lines = adlines()
        self.name_list = []如何填报平行志愿
        for line in lines:
            self.name_list.append(line.rstrip())
row = len(self.name_list)
拍了拍        self.tableWidget.setRowCount(row)
        self.tableWidget.setGeometry(QtCore.QRect(20, 400, 380, 34*row))
        der_list = []
        for i in range(row):
            x = str(i+1)
            der_list.append(x.rjust(2,'0'))
            data = QTableWidgetItem(self.name_list[i])
            self.tableWidget.setItem(i,0,data)
(2)抽取抽签顺序。抽签使用random.shuffle函数随机排列列表中元素的顺序,然后取第1个元素,在界面中显示,通过新建1个Qtime对象timer的timeout信号不断调用抽签函数来实现在界面中的抽签对象滚动显示。“开始”与“停止”按钮分别控制timer的start和stop,实现开始滚动的抽签效果和停止滚动抽中结果,每抽完1 个会将使用pop函数将该结果从待抽取列表中删除。抽签顺序抽完后,将“开始”与“停止”按钮的点击信号与抽取抽签顺序的槽函数startRandomOrder、stopRandomOrder断开,与抽取检查对象的槽函数startRandomObject、stopRandomObject连接,同时将左侧列表按照抽签顺序进行排序,以进行下一步检查对象的抽取。相关代码下:
    def draw(self):
        if Ui_MainWindow.xuhao:

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。