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