实用系列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_())
  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值