广告
返回顶部
首页 > 资讯 > 后端开发 > Python >基于PyQT5制作一个课堂点名系统
  • 620
分享到

基于PyQT5制作一个课堂点名系统

2024-04-02 19:04:59 620人浏览 薄情痞子

Python 官方文档:入门教程 => 点击学习

摘要

刷抖音的时候发现一个老师在用的课堂点名系统。用PyQt5实现了一下同款,导入学生姓名,测试了一下完美运行。 操作效果展示: 完整源代码块还是放在了文章的最后面 使用的时候准备好学生

刷抖音的时候发现一个老师在用的课堂点名系统。用PyQt5实现了一下同款,导入学生姓名,测试了一下完美运行。

操作效果展示:

file

完整源代码块还是放在了文章的最后面

使用的时候准备好学生姓名的文件,使用导入数据的按钮直接导入就可以开始点名了。新建一个文本文档,将姓名设置设置好,姓名文件示例如下。

file

使用系统库或者第三方库都比较常规,这里就不一一介绍了。

from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
from PyQt5.QtCore import *

from qdarkstyle import load_stylesheet_pyqt5

import os
import sys
import time
import random  

为了和UI界面的主线程分离开来,我们采用的还是QThread多线程的方式来实现随机点名模块的。这样做的目的是为了防止主线程阻塞,下面是子线程的实现部分。

class WorkThread(QThread):
    trigger = pyqtSignal(str)
    finished = pyqtSignal(bool)

    def __init__(self, parent=None):
        super(WorkThread, self).__init__(parent)
        self.parent = parent
        self.working = True

    def __del__(self):
        self.working = False
        self.wait()

    def run(self):
        data_list = self.parent.data_list
        if len(data_list) >= 1:
            ran = random.randint(20, 40)
            print('遍历次数:', ran)
            for a in range(ran):
                name = random.choice(data_list)
                self.trigger.emit(name)
                print(name)
                time.sleep(0.6)
            self.finished.emit(True)
        else:
            self.trigger.emit('无数据')

UI 界面的实现部分也比较常规,下面主要实现部分的代码块。

class ClassCollSystem(QWidget):
    def __init__(self):
        super(ClassCollSystem, self).__init__()
        self.data_list = []
        self.init_ui()

    def init_ui(self):
        '''子线程调用'''
        self.thread_ = WorkThread(self)
        self.thread_.trigger.connect(self.set_name)
        self.thread_.finished.connect(self.finished)

        '''应用初始化信息'''
        self.setWindowTitle('课堂点名系统  公众号:[python 集中营]')
        self.setWindowIcon(QIcon('课堂点名.ico'))
        self.setFixedSize(500, 350)

        '''姓名信息布局'''
        vbox_name = QVBoxLayout()
        self.current_name = QLabel()
        self.current_name.setText('随机点名啦')
        self.current_name.setStyleSheet(
            'font-size:50px;text-align:center;font-weight:bold;font-family:"Microsoft JhengHei";')

        vbox_name.addWidget(self.current_name)
        vbox_name.setAlignment(Qt.AlignCenter)

        '''开始信息布局'''
        vbox_start = QVBoxLayout()
        self.start_btn = QPushButton()
        self.start_btn.setText('开始点名')
        self.start_btn.setFixedSize(160, 50)
        self.start_btn.setStyleSheet(
            'font-size:30px;font-weight:bold;text-align:center;font-family:"Microsoft JhengHei";')
        self.start_btn.clicked.connect(self.start_btn_click)

        vbox_start.addWidget(self.start_btn)
        vbox_start.setAlignment(Qt.AlignCenter)
        vbox_start.addSpacing(80)

        '''数据信息布局'''
        vbox_data = QHBoxLayout()
        self.message = QLabel()
        self.message.setText('信息提示 | 公众号:[Python 集中营]')
        self.message.setStyleSheet(
            'font-size:12px;')

        self.import_btn = QPushButton()
        self.import_btn.setText('导入数据')
        self.import_btn.setFixedSize(90, 25)
        self.import_btn.clicked.connect(self.import_btn_click)

        vbox_data.addWidget(self.message)
        vbox_data.addStretch(1)
        vbox_data.addWidget(self.import_btn)

        '''整体布局'''
        vbox = QVBoxLayout()
        vbox.addLayout(vbox_name)
        vbox.addLayout(vbox_start)
        vbox.addLayout(vbox_data)

        self.setLayout(vbox)

    def start_btn_click(self):
        if self.start_btn.text().strip() == '开始点名':
            self.thread_.start()
        else:
            self.start_btn.setText('开始点名')

    def set_name(self, name):
        self.current_name.setText(name)

    def finished(self, finished):
        if finished is True:
            self.start_btn.setText('就是你了')

    def import_btn_click(self):
        file = QFileDialog.getOpenFileName(self, '选择文件', os.getcwd(), 'Text File(*.txt)')
        file_path = file[0]
        print(file_path)
        fl = open(str(file_path), 'r', encoding='utf-8')
        self.data_list = fl.read().strip().split('\n')
        print(self.data_list)
        self.message.setText('信息提示 | 成功导入[' + str(len(self.data_list)) + ']条人员信息')

最后,将主页面加入主体循环直接运行可以了。

完整代码

# -*- coding:utf-8 -*-
# @author Python 集中营
# @date 2022/1/18
# @file test5.py

# 抖音同款课堂点名系统,PyQt5写起来很简单...

from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
from PyQt5.QtCore import *

from qdarkstyle import load_stylesheet_pyqt5

import os
import sys
import time
import random


class WorkThread(QThread):
    trigger = pyqtSignal(str)
    finished = pyqtSignal(bool)

    def __init__(self, parent=None):
        super(WorkThread, self).__init__(parent)
        self.parent = parent
        self.working = True

    def __del__(self):
        self.working = False
        self.wait()

    def run(self):
        data_list = self.parent.data_list
        if len(data_list) >= 1:
            ran = random.randint(20, 40)
            print('遍历次数:', ran)
            for a in range(ran):
                name = random.choice(data_list)
                self.trigger.emit(name)
                print(name)
                time.sleep(0.6)
            self.finished.emit(True)
        else:
            self.trigger.emit('无数据')


class ClassCollSystem(QWidget):
    def __init__(self):
        super(ClassCollSystem, self).__init__()
        self.data_list = []
        self.init_ui()

    def init_ui(self):
        '''子线程调用'''
        self.thread_ = WorkThread(self)
        self.thread_.trigger.connect(self.set_name)
        self.thread_.finished.connect(self.finished)

        '''应用初始化信息'''
        self.setWindowTitle('课堂点名系统  公众号:[Python 集中营]')
        self.setWindowIcon(QIcon('课堂点名.ico'))
        self.setFixedSize(500, 350)

        '''姓名信息布局'''
        vbox_name = QVBoxLayout()
        self.current_name = QLabel()
        self.current_name.setText('随机点名啦')
        self.current_name.setStyleSheet(
            'font-size:50px;text-align:center;font-weight:bold;font-family:"Microsoft JhengHei";')

        vbox_name.addWidget(self.current_name)
        vbox_name.setAlignment(Qt.AlignCenter)

        '''开始信息布局'''
        vbox_start = QVBoxLayout()
        self.start_btn = QPushButton()
        self.start_btn.setText('开始点名')
        self.start_btn.setFixedSize(160, 50)
        self.start_btn.setStyleSheet(
            'font-size:30px;font-weight:bold;text-align:center;font-family:"Microsoft JhengHei";')
        self.start_btn.clicked.connect(self.start_btn_click)

        vbox_start.addWidget(self.start_btn)
        vbox_start.setAlignment(Qt.AlignCenter)
        vbox_start.addSpacing(80)

        '''数据信息布局'''
        vbox_data = QHBoxLayout()
        self.message = QLabel()
        self.message.setText('信息提示 | 公众号:[Python 集中营]')
        self.message.setStyleSheet(
            'font-size:12px;')

        self.import_btn = QPushButton()
        self.import_btn.setText('导入数据')
        self.import_btn.setFixedSize(90, 25)
        self.import_btn.clicked.connect(self.import_btn_click)

        vbox_data.addWidget(self.message)
        vbox_data.addStretch(1)
        vbox_data.addWidget(self.import_btn)

        '''整体布局'''
        vbox = QVBoxLayout()
        vbox.addLayout(vbox_name)
        vbox.addLayout(vbox_start)
        vbox.addLayout(vbox_data)

        self.setLayout(vbox)

    def start_btn_click(self):
        if self.start_btn.text().strip() == '开始点名':
            self.thread_.start()
        else:
            self.start_btn.setText('开始点名')

    def set_name(self, name):
        self.current_name.setText(name)

    def finished(self, finished):
        if finished is True:
            self.start_btn.setText('就是你了')

    def import_btn_click(self):
        file = QFileDialog.getOpenFileName(self, '选择文件', os.getcwd(), 'Text File(*.txt)')
        file_path = file[0]
        print(file_path)
        fl = open(str(file_path), 'r', encoding='utf-8')
        self.data_list = fl.read().strip().split('\n')
        print(self.data_list)
        self.message.setText('信息提示 | 成功导入[' + str(len(self.data_list)) + ']条人员信息')


if __name__ == '__main__':
    app = QApplication(sys.argv)
    app.setStyleSheet(load_stylesheet_pyqt5())
    main = ClassCollSystem()
    main.show()
    sys.exit(app.exec_())

以上就是基于PyQT5制作一个课堂点名系统的详细内容,更多关于PyQT5点名系统的资料请关注编程网其它相关文章!

--结束END--

本文标题: 基于PyQT5制作一个课堂点名系统

本文链接: https://www.lsjlt.com/news/138490.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 基于PyQT5制作一个课堂点名系统
    刷抖音的时候发现一个老师在用的课堂点名系统。用PyQt5实现了一下同款,导入学生姓名,测试了一下完美运行。 操作效果展示: 完整源代码块还是放在了文章的最后面 使用的时候准备好学生...
    99+
    2022-11-13
  • Python轻松写个课堂随机点名系统
    目录起因准备工作效果展示代码实战起因 刚上大学的表弟问我,大学准备好好玩玩,问我有没有什么不挂科的秘诀。 于是我连夜给表弟写了一个课堂点名系统,让他给每个任课老师都送一遍,方便老师就...
    99+
    2023-01-03
    Python课堂点名系统 Python点名系统
  • 基于PyQT5制作一个桌面摸鱼工具
    目录前言按键功能控制主要功能核心代码前言 现在我能一整天都严肃地盯着屏幕,看起来就像在很认真地工作, 利用摸鱼,打开小说,可实行完美摸鱼,实时保存进度 用PYQT5 Mock一个摸鱼...
    99+
    2022-11-13
  • 基于PyQt5制作一个猜数字小游戏
    开始之前,直接来看一下实现后的效果。想自己实现或者需要源码的童鞋直接进场... 将PyQt5的相关模块直接导入即可。 from PyQt5.QtGui import * from ...
    99+
    2022-11-13
  • 基于PyQt5制作一个群发邮件工具
    演示示例使用QQ邮箱发送邮件,先获取自己的QQ邮箱的授权码。因为后面发送邮件时需要使用自己的授权码作为邮箱的密码登录邮箱最后达到发送邮件的目的。 将UI处理的相关的界面包导入进来...
    99+
    2022-11-10
  • 基于PyQt5制作一个windows通知管理器
    前几天看到一个python框架win10toast,它可以用来做windows的消息通知功能。通过设定通知的间隔时间来实现一些事件通知的功能,比如可以可以提醒一头扎进代码编写过程的我...
    99+
    2022-11-13
  • 基于PyQt5制作一个动态指针时钟
    想实现这样一个功能,然后pyqt5中又没有现成的组件可以使用,于是就想着只能通过绘图的方式来实现。说到绘图的话,turtle框架无疑是最常见的选择,但其实通过pyqt5的QPain...
    99+
    2022-11-13
  • 基于PyQt5制作一个截图翻译工具
    目录功能介绍UI 界面截图翻译文字识别全局热键(快捷键)托盘管理主代码功能介绍 1.翻译功能 2.截图功能(快捷键 + 截图存储到剪切板中) 3.文字识别OCR(基于百度API的文字...
    99+
    2022-11-12
  • 基于PyQt5制作一个PDF文件合并器
    操作说明:选择多个PDF文件,执行完合并后会生成一个新的PDF文件,这个新的PDF文件包含所有源PDF文件的页面。 将相关的三方模块导入到代码块中... from PyQt5.Qt...
    99+
    2022-11-13
  • 基于PyQT5制作一个二维码生成器
    个性化二维码的exe桌面应用的获取方式我放在文章最后面了,注意查收。通过执行打包后的exe应用程序可以直接运行生成个性化二维码。 开始之前先来看一下通过二维码生成器是如何生成个性化二...
    99+
    2022-11-12
  • 基于PyQt5制作一个表情包下载器
    每次和朋友聊天苦于没有表情包,而别人的表情包似乎是取之不尽、用之不竭。作为一个程序员哪能甘愿认输,于是做了一个表情包下载器供大家斗图。 首先,还是介绍一下设计思路吧,和我们之前做的百...
    99+
    2022-11-13
  • 基于PyQt5制作一个数据图表生成器
    我的需求:手动配置X轴、Y轴、图表标题等参数自动通过Pyecharts模块生成可视化的html数据图表,并将浏览器图表展示到UI界面上。 制作出图表后的效果展示如下: 另外,生成...
    99+
    2022-11-13
  • 基于PyQT5制作一个敏感词检测工具
    设计思路:根据敏感词库文件筛选,查看输入的文本中是否包含敏感词汇。从而过滤出相关的敏感词。 导入应用相关的模块。 import os import logging import s...
    99+
    2022-11-13
  • 基于PyQt5制作一个gif动态图片生成器
    这个小工具制作的目的是为了将多张图片组合后生成一张动态的GIF图片。设置界面化的操作,只需要将选中的图片导入最后直接生成动态图片。 导入界面相关的第三方库 from PyQt5.Q...
    99+
    2022-11-13
  • 基于PyQt5如何制作一个动态指针时钟
    这篇文章主要介绍基于PyQt5如何制作一个动态指针时钟,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!想实现这样一个功能,然后pyqt5中又没有现成的组件可以使用,于是就想着只能通过绘图的方式来实现。说到绘图的话,tu...
    99+
    2023-06-29
  • 基于PyQt5怎么制作一个windows通知管理器
    本篇内容介绍了“基于PyQt5怎么制作一个windows通知管理器”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!python框架win10t...
    99+
    2023-06-29
  • Python写一个简单上课点名系统(附源码)
    目录一.准备工作1.Tkinter2.PIL二.预览1.启动2.开始点名-顺序点名3.开始点名-随机点名4.手动加载人名单5.开始点名-顺序点名-Pyqt5版本三.思路1.整体实现思...
    99+
    2022-11-12
  • 一起用Python做个上课点名器的制作过程
    目录前言一、核心功能设计二、实现步骤1. UI排版布局设计2. 学生姓名加载3. 随机点名实现4. 连抽模式实现5. 抽取历史查看4. 打包配置前言 前段时间,用PyQt5写了几篇文...
    99+
    2022-11-12
  • 基于PyQt5如何制作一个gif动态图片生成器
    这篇文章的内容主要围绕基于PyQt5如何制作一个gif动态图片生成器进行讲述,文章内容清晰易懂,条理清晰,非常适合新手学习,值得大家去阅读。感兴趣的朋友可以跟随小编一起阅读吧。希望大家通过这篇文章有所收获!这个小工具制作的目的是为了将多张图...
    99+
    2023-06-28
  • 基于Matlab制作一个不良图片检测系统
    目录不良图片检测部分part.0 图片导入part.1 检查是否为肤色part.2 皮肤区域标记part.3 通过皮肤区域特点判定是否为不良图片完整代码批量处理部分不良图片检测部分 ...
    99+
    2022-11-13
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作