国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

一起用Python做個上課點名器,好玩又實用!

phpmatt / 3203人閱讀

摘要:今天就繼續(xù)給大家分享一個讀者粉絲投稿的,關(guān)于上課點名的實戰(zhàn)案例,一起來看看是如何實現(xiàn)的吧首先我們還是一起先來看看點名器實現(xiàn)的效果下面,我們開始介紹這款點名器的制作過程。

前言

前段時間,用PyQt5寫了幾篇文章,關(guān)于Python自制一款炫酷音樂播放器自定義動態(tài)壁紙車牌自動識別系統(tǒng)。今天就繼續(xù)給大家分享一個讀者粉絲投稿的,關(guān)于上課點名的實戰(zhàn)案例,一起來看看是如何實現(xiàn)的吧!

首先我們還是一起先來看看點名器實現(xiàn)的效果:

下面,我們開始介紹這款點名器的制作過程。

直接跳到文末獲取源碼及exe打包程序。

一、核心功能設(shè)計

總體來說,我們這款點名器實現(xiàn)的思路大致是,可以自定義設(shè)置班級學生姓名或者默認通過學號進行學生隨機點名抽取,可以每次單人抽取也可以自己選擇連抽人數(shù)進行多人連抽,并將這些隨機抽取的學生姓名歷史數(shù)據(jù)顯示。

拆解需求,接下來我們可以通過以下幾步進行實現(xiàn):

  1. UI排版布局設(shè)計,確認點名器的各個功能設(shè)計
  2. 讀取班級學生的姓名文件,將各個學生的姓名加載到列表中,如果沒有學生姓名文件默認創(chuàng)建學號文件
  3. 實現(xiàn)對學生姓名的隨機點名抽取功能
  4. 實現(xiàn)多人連抽模式
  5. 查看隨機抽取的學生姓名歷史數(shù)據(jù)

二、實現(xiàn)步驟

之前有讀者反饋說,不知道程序中具體需要哪些模塊、包文件,下面我就把程序中用到模塊先放出來。主要包括了文件讀寫,隨機數(shù),PyQt5,win32con等。

import sys,osfrom random import randintfrom PyQt5 import QtCore, QtGui, QtWidgetsfrom PyQt5.QtGui import *from PyQt5.QtCore import Qt, QTimerfrom PyQt5.QtWidgets import *from win32api import MessageBoxfrom win32con import MB_OK, MB_ICONWARNING

1. UI排版布局設(shè)計

根據(jù)點名器所需要的功能,首先我們可以進行UI布局設(shè)計,我們這次還是使用的pyqt5。主要包含了姓名的隨機抽取顯示功能、連抽模式的隨機抽取顯示、抽取歷史結(jié)果的查看功能、姓名文件的讀取顯示等。核心設(shè)計代碼如下:

# author:Dragon少年def setupUi(self, MainWindow):    #以下課直接粘貼生成的setupui代碼    MainWindow.setObjectName("點名器")    MainWindow.resize(420, 360)    self.centralwidget = QtWidgets.QWidget(MainWindow)    self.centralwidget.setObjectName("centralwidget")    self.label = QtWidgets.QLabel(self.centralwidget)    self.label.setGeometry(QtCore.QRect(55, 50, 331, 71))    font = QtGui.QFont()    font.setFamily("宋體")    font.setPointSize(50)    self.label.setFont(font)    self.label.setObjectName("label")    self.pushButton = QtWidgets.QPushButton(self.centralwidget)    self.pushButton.setGeometry(QtCore.QRect(55, 190, 111, 61))    font = QtGui.QFont()    font.setFamily("宋體")    font.setPointSize(20)    self.pushButton.setFont(font)    self.pushButton.setObjectName("pushButton")    self.pushButton_2 = QtWidgets.QPushButton(self.centralwidget)    self.pushButton_2.setGeometry(QtCore.QRect(253, 190, 111, 61))    font = QtGui.QFont()    font.setFamily("宋體")    font.setPointSize(20)    self.pushButton_2.setFont(font)    self.pushButton_2.setObjectName("pushButton_2")    self.pushButton_3 = QtWidgets.QPushButton(self.centralwidget)    self.pushButton_3.setGeometry(QtCore.QRect(11, 570, 111, 41))    self.pushButton_3.setObjectName("pushButton_3")    self.pushButton_4 = QtWidgets.QPushButton(self.centralwidget)    self.pushButton_4.setGeometry(QtCore.QRect(0, 830, 111, 41))    self.pushButton_4.setObjectName("pushButton_4")    self.listWidget = QtWidgets.QListWidget(self.centralwidget)    self.listWidget.setGeometry(QtCore.QRect(11, 370, 397, 191))    self.listWidget.setObjectName("listWidget")    self.label_2 = QtWidgets.QLabel(self.centralwidget)    self.label_2.setGeometry(QtCore.QRect(11, 340, 210, 21))    self.label_2.setObjectName("label_2")    self.pushButton_5 = QtWidgets.QPushButton(self.centralwidget)    self.pushButton_5.setGeometry(QtCore.QRect(11, 303, 111, 20))    self.pushButton_5.setObjectName("pushButton_5")    self.pushButton_6 = QtWidgets.QPushButton(self.centralwidget)    self.pushButton_6.setGeometry(QtCore.QRect(319, 300, 75, 20))    self.pushButton_6.setObjectName("pushButton_6")    self.label_3 = QtWidgets.QLabel(self.centralwidget)    self.label_3.setGeometry(QtCore.QRect(495, 260, 56, 21))    self.label_3.setObjectName("label_3")    self.label_3.setStyleSheet("color:white;background:#222225")    self.pushButton_7 = QtWidgets.QPushButton(self.centralwidget)    self.pushButton_7.setGeometry(QtCore.QRect(649, 240, 111, 61))    font = QtGui.QFont()    font.setFamily("宋體")    font.setPointSize(30)    self.pushButton_7.setFont(font)    self.pushButton_7.setObjectName("pushButton_7")    self.listWidget_2 = QtWidgets.QListWidget(self.centralwidget)    self.listWidget_2.setGeometry(QtCore.QRect(473, 20, 353, 221))    font = QtGui.QFont()    font.setPointSize(14)    self.listWidget_2.setFont(font)    self.listWidget_2.setFocusPolicy(QtCore.Qt.WheelFocus)    self.listWidget_2.setVerticalScrollBarPolicy(QtCore.Qt.ScrollBarAsNeeded)    self.listWidget_2.setHorizontalScrollBarPolicy(QtCore.Qt.ScrollBarAsNeeded)        self.listWidget_2.setSizeAdjustPolicy(QtWidgets.QAbstractScrollArea.AdjustToContents)    self.listWidget_2.setObjectName("listWidget_2")    MainWindow.setCentralWidget(self.centralwidget)    self.menubar = QtWidgets.QMenuBar(MainWindow)    self.menubar.setGeometry(QtCore.QRect(0, 0, 874, 23))    self.menubar.setObjectName("menubar")    MainWindow.setMenuBar(self.menubar)    self.statusbar = QtWidgets.QStatusBar(MainWindow)    self.statusbar.setObjectName("statusbar")    MainWindow.setStatusBar(self.statusbar)    self.retranslateUi(MainWindow)    QtCore.QMetaObject.connectSlotsByName(MainWindow)    self.pushButton.clicked.connect(self.start)    self.pushButton_2.clicked.connect(self.stop)    self.pushButton_5.clicked.connect(self.showHistory)    self.pushButton_6.clicked.connect(self.showContinue)    self.pushButton_7.clicked.connect(self.ten)                      self.listWidget.setStyleSheet(self.scc)    self.listWidget_2.setStyleSheet(self.scc)    MainWindow.setWindowOpacity(0.95)  # 設(shè)置窗口透明度    MainWindow.setAttribute(Qt.WA_TranslucentBackground)    MainWindow.setWindowFlag(Qt.FramelessWindowHint)  # 隱藏邊框    self.pushButton_8 = QtWidgets.QPushButton(self.centralwidget)    self.pushButton_8.setGeometry(QtCore.QRect(132, 570, 100, 41))    self.pushButton_8.setObjectName("pushButton_8")    self.pushButton_8.clicked.connect(self.rename)    self.pushButton_8.setText("重置名字文件")# author:Dragon少年def retranslateUi(self, MainWindow):    self.wide = 420    self.high = 360    _translate = QtCore.QCoreApplication.translate    _translate = QtCore.QCoreApplication.translate    MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))    self.label.setText(_translate("MainWindow", "恭喜{}號"))    self.label.setStyleSheet("color:white")    self.pushButton.setText(_translate("MainWindow", "開始"))    self.pushButton_2.setText(_translate("MainWindow", "結(jié)束"))    self.pushButton_3.setText(_translate("MainWindow", "打開名字文件"))    self.pushButton_4.setText(_translate("MainWindow", "開gua選項"))    self.label_2.setText(_translate("MainWindow", "點過的學號/姓名:"))    self.pushButton_5.setText(_translate("MainWindow", "查看點過的名字"))    self.pushButton_6.setText(_translate("MainWindow", "連抽模式"))    self.label_3.setText(_translate("MainWindow", "連抽人數(shù)"))    self.pushButton_7.setText(_translate("MainWindow", "開始"))

UI實現(xiàn)效果如下:

對于這個點名器界面,之前有讀者粉絲私信我,如何實現(xiàn)將某些內(nèi)容顯示及隱藏動態(tài)控制,今天我們就通過這個點名器進行演示實現(xiàn)。

例如對于這個點名器,我們想默認情況下,不要顯示抽取的學生歷史數(shù)據(jù),也不要顯示連抽相關(guān)的內(nèi)容,想讓這個點名器界面更加簡潔直觀一些,如下圖所示。

那么這個功能該如何實現(xiàn)呢?其實也非常簡單,只要我們定義一個事件函數(shù),通過對界面窗體的寬高進行resize重置,然后將該事件函數(shù)綁定到類似按鈕點擊事件上,就可以實現(xiàn)動態(tài)顯示/隱藏部分界面內(nèi)容了。核心代碼如下:

# author:Dragon少年# 點擊“查看點過的名字”時,調(diào)用該函數(shù),對界面窗體高度大小進行resize重置def showHistory(self):    global seed    if not seed:        self.high = 656        MainWindow.resize(self.wide,self.high)        seed = True    else:        self.high = 360        MainWindow.resize(self.wide, self.high)        seed = False# 點擊“連抽模式”時,調(diào)用該函數(shù),對界面窗體寬度大小進行resize重置def showContinue(self):    global choud    if not choud:        self.wide = 874        MainWindow.resize(self.wide, self.high)        choud = True    else:        self.wide = 420        MainWindow.resize(self.wide, self.high)        choud = False

UI布局設(shè)計完成,下面我們開始進行班級學生姓名的讀取加載。

2. 學生姓名加載

接下來我們需要對要隨機點名抽取的學生姓名進行加載放到一個列表中,這里我們需要注意是否有name.txt文件,如果有可以直接讀取加載姓名數(shù)據(jù),如果沒有該文件,則需要默認根據(jù)數(shù)字進行學號文件創(chuàng)建。核心代碼如下:

# author:Dragon少年def name():    with open("name.txt", "w") as f:        print(f.truncate())        print(f.write(a))try:    wordlist3 = []    with open("name.txt", encoding="utf8") as f:        for line in f.readlines():            wordlist3.append(line.strip("/n"))  # strip("/n")去掉字符串中的"/n"    print(wordlist3)    name_list = wordlist3except:    name()    MessageBox(0, "請及時修改當前目錄下name文件,默認將為1-52", "MessageBox", MB_OK | MB_ICONWARNING)    name_list = ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18",                 "19", "20", "21", "22", "23", "24", "25", "26", "27", "28", "29", "30", "31", "32", "33", "34", "35",                 "36", "37", "38", "39", "40", "41", "42", "43", "44", "45", "46", "47", "48", "49", "50", "51", "52", ]

3. 隨機點名實現(xiàn)

隨機點名我們可以設(shè)計兩個按鈕,分別來控制開始抽取和停止抽取功能,通過定時器來進行學生姓名列表數(shù)據(jù)的隨機抽取,從而實現(xiàn)隨機點名的功能。核心代碼如下:

# author:Dragon少年# 對姓名列表進行隨機顯示 模擬隨機點名功能def setname(self):    global running    global name    try:        name = name_list[randint(0, len(name_list) - 1)]        self.label.setText("恭喜{}號!!!".format(name))    except:        self.name()        reply = QtWidgets.QMessageBox.warning(self, u"警告", u"發(fā)生錯誤,請檢查name文件的學號后再重新打開本軟件", QtWidgets.QMessageBox.Yes)        sys.exit()# 開始按鈕綁定 通過定時器加載隨機點名函數(shù)def start(self):    global running    if running:        print("running")        pass    else:        self.timer = QTimer(self)        self.timer.timeout.connect(self.setname)        self.timer.start(50)        running = "True"# 結(jié)束按鈕綁定 控制定時器停止def stop(self):    global running, a    if running:        self.timer.stop()        running = False        self.listWidget.addItem(name)    else:        reply = QtWidgets.QMessageBox.warning(self, u"警告", u"還沒開始就想結(jié)束?", QtWidgets.QMessageBox.Yes)

至此,我們已經(jīng)可以實現(xiàn)點名功能了,如下所示。

4. 連抽模式實現(xiàn)

隨機抽取功能已經(jīng)實現(xiàn)了,多人連抽和隨機抽取類似,只要進行姓名列表隨機抽取對應(yīng)人數(shù)就可以了。當然對抽取人數(shù)的輸入,我們需要進行一些輸入限制,避免一些異常輸入情況,例如輸入非數(shù)字、輸入負數(shù)、輸入數(shù)字過大等。我們只要將連抽函數(shù)同樣綁定到按鈕上就可以了。核心代碼如下:

# author:Dragon少年def ten(self):    num = self.lineEdit.text()    print (num)    num = int(num)    if not num =="" and not num<=0 and not num>1000:        if num > 20:            reply = QtWidgets.QMessageBox.warning(self, u"警告", u"認真的嗎,這么多", QtWidgets.QMessageBox.Yes)        self.listWidget_2.clear()        for i in range (0,int(num)):            name = name_list[randint(0, len(name_list) - 1)]            self.listWidget_2.addItem(name)            self.listWidget.addItem(name)    elif num =="":        reply = QtWidgets.QMessageBox.warning(self, u"警告", u"請輸入數(shù)字", QtWidgets.QMessageBox.Yes)        self.listWidget_2.clear()    elif num<0:        #win32api.MessageBox(0, "你見過負數(shù)個人么???????", "通知", win32con.MB_OK | win32con.MB_ICONWARNING)        reply = QtWidgets.QMessageBox.warning(self, u"警告", u"人數(shù)負數(shù),輸入有誤!", QtWidgets.QMessageBox.Yes)        self.listWidget_2.clear()    elif num==0:        #win32api.MessageBox(0, "人都被你吃了???", "通知", win32con.MB_OK | win32con.MB_ICONWARNING)        reply = QtWidgets.QMessageBox.warning(self, u"警告", u"人數(shù)為0,輸入有誤!", QtWidgets.QMessageBox.Yes)        self.listWidget_2.clear()    elif num>1000:        #win32api.MessageBox(0, "這么大?要不起~", "通知", win32con.MB_OK | win32con.MB_ICONWARNING)        reply = QtWidgets.QMessageBox.warning(self, u"警告", u"人數(shù)超出限制,輸入有誤!", QtWidgets.QMessageBox.Yes)        self.listWidget_2.clear()

5. 抽取歷史查看

我們最后再實現(xiàn)一個對點名的學生姓名進行歷史數(shù)據(jù)顯示查看功能。該功能實現(xiàn)也很簡單,只要對上面隨機抽取的姓名添加到對應(yīng)的歷史列表框中就可以了;還可以對學生姓名文件進行重置等功能。核心代碼如下:

# author:Dragon少年def rename
                 
               
              

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/121686.html

相關(guān)文章

  • 11.8-11.14【大學生Python學習】社區(qū)總結(jié)+優(yōu)秀社區(qū)成員點名表揚&amp;&am

    摘要:社區(qū)簡介一個人可以走得很快,一群人才能走得更遠。作為過來人,我們每一位社區(qū)管理人員都深知剛步入大學的同學都會經(jīng)歷迷茫時期,不是不想學習,而是不知道該怎么學,從何學起,時間就在悄然間流逝。 ...

    chinafgj 評論0 收藏0
  • 設(shè)計模式學習筆記(一)【Singleton、Adapter、Iterator 、Prototype

    摘要:今天上課的時候老師開始講個設(shè)計模式,為加深印象,特開一篇文章來做記錄。其中參考大話設(shè)計模式以及上課的例子,后期會補充關(guān)于的應(yīng)用保證一個類僅有一個實例。單例是有狀態(tài)的,允許子類繼承,擁有唯一的對象實例。原始對象與副本引用同一對象。 今天上課的時候老師開始講23個設(shè)計模式,為加深印象,特開一篇文章來做記錄。其中參考《大話設(shè)計模式》以及上課的例子(java),后期會補充關(guān)于js的應(yīng)用 ...

    FreeZinG 評論0 收藏0
  • 設(shè)計模式學習筆記(一)【Singleton、Adapter、Iterator 、Prototype

    摘要:今天上課的時候老師開始講個設(shè)計模式,為加深印象,特開一篇文章來做記錄。其中參考大話設(shè)計模式以及上課的例子,后期會補充關(guān)于的應(yīng)用保證一個類僅有一個實例。單例是有狀態(tài)的,允許子類繼承,擁有唯一的對象實例。原始對象與副本引用同一對象。 今天上課的時候老師開始講23個設(shè)計模式,為加深印象,特開一篇文章來做記錄。其中參考《大話設(shè)計模式》以及上課的例子(java),后期會補充關(guān)于js的應(yīng)用 ...

    liuchengxu 評論0 收藏0
  • 學習Python想放棄,因為你沒有培養(yǎng)自己的興趣!

    摘要:為啥你天天刷抖音一點都不煩,因為你覺得視頻好看你有興趣啊。比如我們說你玩是不是要開始搭建一個自己的網(wǎng)站,是不是可以自己寫一個小的腳本來自動發(fā)消息給你的女朋友等等,通過這樣的小例子來慢慢的培養(yǎng)自己的學習的興趣。學習,切勿貪快貪多。 大家好,我是菜鳥哥! 周末啦,跟大家聊一下我們粉絲團的情況...

    ideaa 評論0 收藏0
  • 基于Python編寫一個點名的示例代碼

      今天,小編給大家去做一個詳細的介紹,介紹的內(nèi)容是涉及到Python的,主要還是利用這門語言去進行編程,我們可以利用這門語言,去編寫一個示例器的代碼,具體的代碼,下文給大家貼了出來。  前言  想起小學的時候老師想點名找小伙伴回答問題的時候,老師竟斥巨資買了個點名器。今日無聊便敲了敲小時候老師斥巨資買的點名器。  本人姓白,就取名小白點名器啦,嘿嘿  代碼包含:添加姓名、查看花名冊、使用指南、隨...

    89542767 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<