實用系列2 — 隨機點名界面程序python版本

實用系列2 — 隨機點名界面程序python版本

背景

還是家裏親戚作爲老師在上網課時希望可以隨機點名同學回答問題,總是自己隨便想學號有點頭疼而且傾向性太強,希望有個簡單的程序界面可以自動選擇點名人數和顯示被點名的學號

技術方案

環境
python : 3.6+
三方庫:pyqt5,random

需求
根據自定義的點名人數,隨機顯示點名的學號
要求停止選擇前不停的隨機顯示學號

方案
整體界面使用pyqt5完成,顯示的部分由Qlabel完成,
輸入自定義人數部分由QLineEdit完成,開始和結束的按鈕由QPushButton完成
整體界面如下(新手求輕噴)
在這裏插入圖片描述
具體代碼

#coding=utf8

"""
界面隨機挑選學號程序
可以選擇隨機數量,並打印在界面
"""


import sys
import random
from PyQt5.QtWidgets import QWidget, QPushButton, QApplication, QDesktopWidget, QLabel
from PyQt5.QtCore import QCoreApplication,QTimer
from PyQt5.Qt import QLineEdit, QFont


class Example(QWidget):

    def __init__(self):
        super().__init__()
        self.timer = None
        self.initUI()

    # 控制窗口顯示在屏幕中心的方法
    def center(self):
        # 獲得窗口
        qr = self.frameGeometry()
        # 獲得屏幕中心點
        cp = QDesktopWidget().availableGeometry().center()
        # 顯示到屏幕中心
        qr.moveCenter(cp)
        self.move(qr.topLeft())

    def initUI(self):
        # create input textbox
        self.input = QLineEdit(self)
        self.input.move(300, 140)
        self.input.resize(50, 20)
        temp = QLabel(self)
        temp.move(230,140)
        temp.resize(60,20)
        temp.setText('點名人數')

        # create presenting table
        self.textbox = QLabel(self)
        self.textbox.move(20, 20)
        self.textbox.resize(100, 300)
        self.textbox.setFont(QFont("Timers" , 28))

        self.textbox1 = QLabel(self)
        self.textbox1.move(20, 60)
        self.textbox1.resize(100, 300)
        self.textbox1.setFont(QFont("Timers" , 28))

        # shuffle id list
        self.name_list = list(map(str,range(42)))
        random.shuffle(self.name_list)
        self.index = len(self.name_list)
        self.number = 1


        # create start, stop button
        self.start_ = QPushButton('開始', self)
        self.stop_ = QPushButton('結束', self)
        self.start_.move(215, 170)
        self.stop_.move(315,170)
        self.start_.clicked.connect(self._start)
        self.stop_.clicked.connect(self._stop)

        self.resize(600, 250)
        self.setWindowTitle('點名')
        self.center()
        self.show()



    def _range_name(self):
        if self.input.text():
            self.number = int(self.input.text())
        self.index += 1
        temp_res1 = None
        if self.index >= len(self.name_list):
            self.index = 0
        if self.index + self.number - 1 > len(self.name_list):
            temp_res = self.name_list[self.index:] + self.name_list[:self.index + self.number  - len(self.name_list)]
        else:
            temp_res = self.name_list[self.index: self.index + self.number]
        if len(temp_res) > 10:
            temp_res1 = temp_res[10:]
            temp_res = temp_res[:10]
        
        self.textbox.setText(','.join(temp_res))
        self.textbox.adjustSize()
        if temp_res1:
            self.textbox1.setText(','.join(temp_res1))
            self.textbox1.adjustSize()
        else:
            self.textbox1.setText('')

    def _start(self):
        if not self.timer:
            self.timer = QTimer()
        self.timer.timeout.connect(self._range_name)
        self.timer.start(50)

        if self.start_.isEnabled():
            self.start_.setEnabled(False)
        #self.stop_.setEnabled(True)
        QApplication.processEvents()

    def _stop(self):
        if not self.start_.isEnabled():
            self.start_.setEnabled(True)
        if self.timer:
            self.timer.stop()



if __name__ == '__main__':
    app = QApplication(sys.argv)
    ex = Example()
    sys.exit(app.exec_())
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章