實用系列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_())