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

【浏览全文】

操作成果展现:

残缺源代码块还是放在了文章的最初面,有须要间接运行到文末获取下载方式就好了。

应用的时候筹备好学生姓名的文件,应用导入数据的按钮间接导入就能够开始点名了。新建一个文本文档,将姓名设置设置好,姓名文件示例如下。

应用零碎库或者第三方库都比拟惯例,这里就不一一介绍了。

from PyQt5.QtWidgets import *from PyQt5.QtGui import *from PyQt5.QtCore import *from qdarkstyle import load_stylesheet_pyqt5import osimport sysimport timeimport 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)) + ']条人员信息')

最初,将主页面退出主体循环间接运行能够了。

残缺源代码获取形式,公众号内回复"课堂点名零碎",间接下载就能够了。

我是 [Python 集中营]、很快乐您看到了最初, 我是一个专一于 Python 常识分享的公众号,心愿能够失去您的关注~

【往期精彩】

动工啦!批量向PDF文件增加中文水印...

大年初二、做了一个windows告诉管理器!

百度图片下载器2.0

gif动静图片生成器,多张图片组合后生成动图...

python几个常见的数据处理操作,一行代码就能实现!