當我把用Python做的課堂點名系統獻給各科老師後,再也沒掛過科

来源:https://www.cnblogs.com/hahaa/archive/2022/12/28/17010232.html
-Advertisement-
Play Games

剛上大學的表弟問我,大學準備好好玩玩,問我有沒有什麼不掛科的秘訣。 哎,這可就問對人了,要想不掛科,先把老師賄賂好,當然,咱們說的賄賂不是送錢啥的,這不是侮辱老師嗎? 於是我連夜給表弟寫了一個課堂點名系統,讓他給每個任課老師都送一遍,方便老師就是方便自己,嘿嘿~ 準備工作 首先我們需要準備好點名的姓 ...


剛上大學的表弟問我,大學準備好好玩玩,問我有沒有什麼不掛科的秘訣。

哎,這可就問對人了,要想不掛科,先把老師賄賂好,當然,咱們說的賄賂不是送錢啥的,這不是侮辱老師嗎?

於是我連夜給表弟寫了一個課堂點名系統,讓他給每個任課老師都送一遍,方便老師就是方便自己,嘿嘿~

準備工作

首先我們需要準備好點名的姓名文件,使用的時候導入進去就可以開始點名了。

新建一個文本文檔,將姓名設置設置好,如下:

使用系統庫和第三方庫都比較常規

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('源碼自取君羊708525271 ')
        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('源碼自取君羊708525271')
        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,有時候不知道怎麼學,從哪裡開始學。掌握了基本的一些語法或者做了兩個案例後,不知道下一步怎麼走,不知道如何去學習更加高深的知識。

# 那麼對於這些大兄弟們,我準備了大量的免費視頻教程,PDF電子書籍,以及本文源代碼!
# 直接在這個君羊 708525271 自取就好了!

 

好了,今天的分享就到這裡結束了,大家快去試試吧。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 作者:劉鄧忠 Mysql 是大家最常用的資料庫,下麵為大家帶來 mysql 索引下推知識點的分享,以便鞏固 mysql 基礎知識,如有錯誤,還請各位大佬們指正。 1 什麼是索引下推 索引下推 (Index Condition Pushdown,索引條件下推,簡稱 ICP),是 MySQL5.6 版本 ...
  • 好家伙,好家伙,本篇為《JS高級程式設計》第八章“對象、類與面向對象編程”學習筆記 1.原型鏈 原型鏈是JS實現"繼承"的方案之一 ECMA-262把原型鏈定義為ECMAScript的主要繼承方式。其基本思想就是通過原型繼承多個引用類型的屬性和方法。 重溫一下構造函數、原型和實例的關係:每個構造函數 ...
  • 一.概述 傳統許可權管理: 類似於這樣,每新增一個人都要重新給她一些許可權,是針對每個人單獨設置的,這種方法已經不適用於高效管控許可權的 基於此,RBAC許可權模型就誕生了,Role-Based Access control也就是基於角色的許可權控制,相對於傳統模式,這套方案強調一個==role角色== RB ...
  • 標簽 tag 基礎標簽 div 塊元素 介紹:沒有任何含義,主要用於 div 進行模塊佈局 類型:塊級元素 block,盒子占用寬度為一整行 屬性:沒有屬性 <div>我是模塊</div> 我是模塊 span 行內文本元素 介紹:沒有任何含義,主要用於展示文本內容 類型:內聯元素 inline,盒子 ...
  • 這個問題作者認為是所有從後端轉向前端開發的程式員,都會遇到的第一問題。JS前端編程與後端編程最大的不同,就是它的非同步機制,同時這也是它的核心機制。 為了更好地說明如何返回非同步調用的結果,先看三個嘗試非同步調用的示例吧。 示例一:調用一個後端介面,返回介面返回的內容 function foo() { v ...
  • 建模對於大家來講並不陌生,而且建模的方法也有很多,如用例建模、四色建模、事件風暴等,但在日常工作中,大家又覺得建模挺虛的:怎麼把建模落到實際開發工作中。個人認為建模是分兩部分:第一部分是業務概念建模,對現實業務抽取核心概念構建出模型(知識層);第二部分是系統建模,系統建模是源於業務概念模型,遵循某些... ...
  • 題目來源 224. 基本計算器 題目詳情 給你一個字元串表達式 s ,請你實現一個基本計算器來計算並返回它的值。 註意:不允許使用任何將字元串作為數學表達式計算的內置函數,比如 eval() 。 示例 1: 輸入: s = "1 + 1" 輸出: 2 示例 2: 輸入: s = " 2-1 + 2 ...
  • JZ64 求1+2+3+...+n 題目 求1+2+3+...+n,要求不能使用乘除法、for、while、if、else、switch、case等關鍵字及條件判斷語句(A?B:C)。 方法 位運算 思路 演算法實現 從1連加到n,不能使用城乘除法,那就只能相加了。一個一個加,但是迴圈需要判斷什麼時候 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...