欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

基于PyQT5制作一個課堂點名系統(tǒng)

 更新時間:2022年02月09日 08:38:45   作者:Python?集中營  
這篇文章主要為大家介紹一個基于PyQt5實現(xiàn)的抖音同款課堂點名系統(tǒng),文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起動手試一試

刷抖音的時候發(fā)現(xiàn)一個老師在用的課堂點名系統(tǒng)。用PyQt5實現(xiàn)了一下同款,導入學生姓名,測試了一下完美運行。

操作效果展示:

file

完整源代碼塊還是放在了文章的最后面

使用的時候準備好學生姓名的文件,使用導入數(shù)據(jù)的按鈕直接導入就可以開始點名了。新建一個文本文檔,將姓名設(shè)置設(shè)置好,姓名文件示例如下。

file

使用系統(tǒng)庫或者第三方庫都比較常規(guī),這里就不一一介紹了。

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多線程的方式來實現(xiàn)隨機點名模塊的。這樣做的目的是為了防止主線程阻塞,下面是子線程的實現(xiàn)部分。

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('遍歷次數(shù):', 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('無數(shù)據(jù)')

UI 界面的實現(xiàn)部分也比較常規(guī),下面主要實現(xiàn)部分的代碼塊。

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

    def init_ui(self):
        '''子線程調(diào)用'''
        self.thread_ = WorkThread(self)
        self.thread_.trigger.connect(self.set_name)
        self.thread_.finished.connect(self.finished)

        '''應(yīng)用初始化信息'''
        self.setWindowTitle('課堂點名系統(tǒng)  公眾號:[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)

        '''數(shù)據(jù)信息布局'''
        vbox_data = QHBoxLayout()
        self.message = QLabel()
        self.message.setText('信息提示 | 公眾號:[Python 集中營]')
        self.message.setStyleSheet(
            'font-size:12px;')

        self.import_btn = QPushButton()
        self.import_btn.setText('導入數(shù)據(jù)')
        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)) + ']條人員信息')

最后,將主頁面加入主體循環(huán)直接運行可以了。

完整代碼

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

# 抖音同款課堂點名系統(tǒng),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('遍歷次數(shù):', 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('無數(shù)據(jù)')


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

    def init_ui(self):
        '''子線程調(diào)用'''
        self.thread_ = WorkThread(self)
        self.thread_.trigger.connect(self.set_name)
        self.thread_.finished.connect(self.finished)

        '''應(yīng)用初始化信息'''
        self.setWindowTitle('課堂點名系統(tǒng)  公眾號:[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)

        '''數(shù)據(jù)信息布局'''
        vbox_data = QHBoxLayout()
        self.message = QLabel()
        self.message.setText('信息提示 | 公眾號:[Python 集中營]')
        self.message.setStyleSheet(
            'font-size:12px;')

        self.import_btn = QPushButton()
        self.import_btn.setText('導入數(shù)據(jù)')
        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制作一個課堂點名系統(tǒng)的詳細內(nèi)容,更多關(guān)于PyQT5點名系統(tǒng)的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Pandas sample隨機抽樣的實現(xiàn)

    Pandas sample隨機抽樣的實現(xiàn)

    隨機抽樣,是統(tǒng)計學中常用的一種方法,本文主要介紹了Pandas sample隨機抽樣的實現(xiàn),文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-06-06
  • Python關(guān)于__name__屬性的含義和作用詳解

    Python關(guān)于__name__屬性的含義和作用詳解

    在本篇文章里小編給大家分享的是關(guān)于Python關(guān)于__name__屬性的含義和作用知識點,需要的朋友們可以參考下。
    2020-02-02
  • Python?ftfy?包的使用案例解析

    Python?ftfy?包的使用案例解析

    Unicode是一種字符編碼標準,用于表示文本中的字符,通過安裝 ftfy 軟件包,可以在 Python 中使用它提供的函數(shù)和工具來處理和修復文本中的 Unicode 問題,從而確保文本在各種應(yīng)用中的正確性和可靠性,這篇文章主要介紹了Python ftfy包的理解和使用,需要的朋友可以參考下
    2023-05-05
  • linux中使用Python對圖片進行批量命名

    linux中使用Python對圖片進行批量命名

    大家好,本篇文章主要講的是linux中使用Python對圖片進行批量命名,感興趣的同學趕快來看一看吧,對你有幫助的話記得收藏一下,方便下次瀏覽
    2021-12-12
  • scrapy框架中用ssh連接遠程服務(wù)器的實現(xiàn)

    scrapy框架中用ssh連接遠程服務(wù)器的實現(xiàn)

    本文主要介紹了scrapy?框架中用ssh連接遠程服務(wù)器的實現(xiàn),文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • python實現(xiàn)簡單猜單詞游戲

    python實現(xiàn)簡單猜單詞游戲

    這篇文章主要為大家詳細介紹了python實現(xiàn)簡單猜單詞游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-12-12
  • Python函數(shù)參數(shù)定義及傳遞方式解析

    Python函數(shù)參數(shù)定義及傳遞方式解析

    這篇文章主要介紹了Python函數(shù)參數(shù)定義及傳遞方式解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-06-06
  • Python編寫一個趣味問答小游戲

    Python編寫一個趣味問答小游戲

    隨著六一兒童節(jié)的到來,我們可以為孩子們編寫一個有趣的小游戲,讓他們在游戲中學習有關(guān)六一兒童節(jié)的知識。本文將介紹如何用Python編寫一個六一兒童節(jié)問答小游戲及趣味比賽,需要的可以參考一下
    2023-06-06
  • 使用Python實現(xiàn)提取PDF文件中指定頁面的內(nèi)容

    使用Python實現(xiàn)提取PDF文件中指定頁面的內(nèi)容

    在日常工作和學習中,我們經(jīng)常需要從PDF文件中提取特定頁面的內(nèi)容,本文主要為大家詳細介紹了如何使用Python編程語言和兩個強大的庫——pymupdf和wxPython來實現(xiàn)這個任務(wù),需要的可以了解下
    2023-12-12
  • python通過matplotlib生成復合餅圖

    python通過matplotlib生成復合餅圖

    這篇文章主要介紹了python通過matplotlib生成復合餅圖,本文通過實例代碼給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-02-02

最新評論