基于PyQt的分组工具

基于PyQt的分组工具

功能描述:对已有学生列表进行分组,结果一组一组的出现。

(类似于抽签分组

我为什么要做这个:

  • 一个朋友需要组织一个比赛,需要将16人分为4组,但是主办方并不想要四组的结果同时出来。需要一组一组地显示出来。(何必嘞?

  • 然鹅现在的小程序干脆利落直接把分好组的结果显示出来。

  • 于是简单写了一下这个分组工具。后续优化自定义分组。

一、分组核心代码编写

1、代码

import random

# 成员名单列表
list_stu = ["01", "02", "03", "04", "05", "06", "07", "08", "09", "10", "11", "12", "13", "14", "15", "16"]
# 通过随机数函数将列表打乱排序
random.shuffle(list_stu)
n = 4  # 分成n组
m = int(len(list_stu) / n)  # 每组成员数
list_fz = []  # 创建分组列表
for i in range(0, len(list_stu), m):
    list_fz.append(list_stu[i:i + m])
# 循环遍历嵌套列表
for i in range(len(list_fz)):
    print("第%d组名单:" % (i + 1), end=" ")
    for stu in list_fz[i]:
        print(stu, end="  ")
    print()
print()

2、运行结果

在这里插入图片描述

二、GUI界面的分组代码编写

1、代码

import sys
import random

from PyQt5.QtWidgets import QMainWindow, QPushButton, QApplication, QLabel, QMessageBox
from PyQt5.QtWidgets import QDesktopWidget
from PyQt5.QtCore import Qt


class Example(QMainWindow):

    def __init__(self):
        super().__init__()

        self.initUI()

    def initUI(self):
        self.resize(1000, 500)
        # 设置标题
        self.setWindowTitle('分组工具')
        # 设置居中
        self.center()

        # 创建按钮
        btn1 = QPushButton("分组", self)
        btn1.move(450, 400)
        # 创建label
        self.label_1 = QLabel(self)
        self.label_1.move(100, 50)
        self.label_1.resize(800, 50)
        fz = "<p style='line-height:50px; width:100% ; white-space: pre-wrap; font-size: 35px; '> 分组情况 </p>";
        self.label_1.setText(fz)
        self.label_1.setAlignment(Qt.AlignCenter)
        self.label_2 = QLabel(self)
        self.label_2.move(100, 100)
        self.label_2.resize(800, 250)

        # 定义全局变量
        global count
        global list_fz
        global members
        global n

        # 分组
        # 学生名单列表
        list_stu = ["01", "02", "03", "04", "05", "06", "07", "08", "09", "10", "11", "12", "13", "14", "15", "16"]
        # 通过随机数函数将列表打乱排序
        random.shuffle(list_stu)
        n = 4  # 分成n组
        m = int(len(list_stu) / n)  # 每组成员数
        list_fz = []  # 创建分组列表
        for i in range(0, len(list_stu), m):
            list_fz.append(list_stu[i:i + m])
        # 循环遍历嵌套列表
        for i in range(len(list_fz)):
            print("第%d组名单: " % (i + 1), end=" ")
            for stu in list_fz[i]:
                print(stu, end="  ")
            print()
        print()
        count = 0
        members = ""

        btn1.clicked.connect(self.buttonClicked)
        self.statusBar()
        self.show()

    def center(self):
        qr = self.frameGeometry()
        # 得到了主窗口大小
        cp = QDesktopWidget().availableGeometry().center()
        # 获取显示器的分辨率,然后得到中间点的位置
        qr.moveCenter(cp)
        # 然后把自己的窗口的中心点放到qr的中心点
        self.move(qr.topLeft())

    def buttonClicked(self):
        global count
        global list_fz
        global members
        global n
        count += 1
        if (count > n):
            msg_box = QMessageBox(QMessageBox.Information, '错误', '您已分组完毕!!')
            msg_box.exec_()
        else:
            members += '第' + str(count) + '组名单:'
            for stu in list_fz[count - 1]:
                members += stu
                members += ' '
            members += '\n'
            membersShow = "<p style='line-height:50px; width:100% ; white-space: pre-wrap; font-size: 25px;'>" + members + "</p>";
            self.label_2.setText(membersShow)


app = QApplication(sys.argv)
ex = Example()
sys.exit(app.exec_())

2、运行结果

  • 点击分组开始分组,当分组结束再点击是弹出“分组完毕”的提示框。
    在这里插入图片描述
  • 点击一下分组出一组名单。
    在这里插入图片描述

三、将.py文件打包为.exe可执行文件

可以在pycharm中的terminal中输入,也可以在文件目录下输入cmd进入命令行

1、下载pyinstaller

pip install pyinstaller -i https://pypi.tuna.tsinghua.edu.cn/simple/

2、打包

-F 是用于将所有的支持文件全部都打包在一起,不显示其他的依赖文件

-w 在程序运行的过程中隐藏后台控制的黑窗口

-n 指定可执行文件

-i icon.ico 对将同目录下的icon.ico文件设置为执行文件图标

 pyinstaller -w -F python文件名.py -i 图标名.ico

四、总结

之前没有接触过PyQt,对python基础知识掌握的也不是很牢靠。做出的内容也很简单,没什么特别的思考。希望之后多多进步。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值