一起用Python做个上课点名器,好玩又实用!_python点名系统显示每一位同学的头像

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)  # 设置窗口透明度
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”, “结束”))
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”, “连抽人数”))
self.pushButton_7.setText(_translate(“MainWindow”, “开始”))


UI实现效果如下:  
 ![在这里插入图片描述](https://img-blog.csdnimg.cn/d081d1f9ac134161854d01cd65fcc769.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBARHJhZ29u5bCR5bm0,size_20,color_FFFFFF,t_70,g_se,x_16)  
 对于这个点名器界面,之前有读者粉丝私信我,如何实现将某些内容显示及隐藏动态控制,今天我们就通过这个点名器进行演示实现。


例如对于这个点名器,我们想默认情况下,不要显示抽取的学生历史数据,也不要显示连抽相关的内容,想让这个点名器界面更加简洁直观一些,如下图所示。  
 ![在这里插入图片描述](https://img-blog.csdnimg.cn/58292aa7612a4b2683efb24ac3dc1610.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBARHJhZ29u5bCR5bm0,size_12,color_FFFFFF,t_70,g_se,x_16)  
 那么这个功能该如何实现呢?其实也非常简单,只要我们定义一个事件函数,通过对界面窗体的宽高进行resize重置,然后将该事件函数绑定到类似按钮点击事件上,就可以实现动态显示/隐藏部分界面内容了。核心代码如下:



author:Dragon少年

点击“查看点过的名字”时,调用该函数,对界面窗体高度大小进行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

点击“连抽模式”时,调用该函数,对界面窗体宽度大小进行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布局设计完成,下面我们开始进行班级学生姓名的读取加载。


##### 2. 学生姓名加载


接下来我们需要对要随机点名抽取的学生姓名进行加载放到一个列表中,这里我们需要注意是否有name.txt文件,如果有可以直接读取加载姓名数据,如果没有该文件,则需要默认根据数字进行学号文件创建。核心代码如下:



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 = wordlist3
except:
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. 随机点名实现


随机点名我们可以设计两个按钮,分别来控制开始抽取和停止抽取功能,通过定时器来进行学生姓名列表数据的随机抽取,从而实现随机点名的功能。核心代码如下:



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’发生错误,请检查name文件的学号后再重新打开本软件’, QtWidgets.QMessageBox.Yes)
sys.exit()

开始按钮绑定 通过定时器加载随机点名函数

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’

结束按钮绑定 控制定时器停止

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’还没开始就想结束?', QtWidgets.QMessageBox.Yes)


至此,我们已经可以实现点名功能了,如下所示。  
 ![在这里插入图片描述](https://img-blog.csdnimg.cn/013963bbd91f4a12affb90d297cc1fd6.gif)


##### 4. 连抽模式实现


随机抽取功能已经实现了,多人连抽和随机抽取类似,只要进行姓名列表随机抽取对应人数就可以了。当然对抽取人数的输入,我们需要进行一些输入限制,避免一些异常输入情况,例如输入非数字、输入负数、输入数字过大等。我们只要将连抽函数同样绑定到按钮上就可以了。核心代码如下:



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’请输入数字’, 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’人数负数,输入有误!', 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’人数为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’人数超出限制,输入有误!', QtWidgets.QMessageBox.Yes)
self.listWidget_2.clear()


##### 5. 抽取历史查看


我们最后再实现一个对点名的学生姓名进行历史数据显示查看功能。该功能实现也很简单,只要对上面随机抽取的姓名添加到对应的历史列表框中就可以了;还可以对学生姓名文件进行重置等功能。核心代码如下:



author:Dragon少年

def rename(self):
reply = QtWidgets.QMessageBox.question(self, u’警告’, u’确定重置name文件为1-52?', QtWidgets.QMessageBox.Yes,
QtWidgets.QMessageBox.No)
if reply == QtWidgets.QMessageBox.Yes:
with open(‘name.txt’, ‘w’) as f:
print(f.truncate())
print(f.write(a))
MessageBox(0, “重置完成,”, “通知”, MB_OK | MB_ICONWARNING)
else:
pass


至此,这款点名器就完成了, 一起来看看效果吧!![在这里插入图片描述](https://img-blog.csdnimg.cn/eed6fa443b564b94a9971598c275eacb.jpg?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBARHJhZ29u5bCR5bm0,size_20,color_FFFFFF,t_70,g_se,x_16)


#### 4. 打包配置


最近有好几个粉丝问我,Python能不能打包成exe?如何打包呢?之前已经介绍过了,今天就通过这个再来来一起介绍下。


Python常用的打包工具是第三方库Pyinstaller,需要安装下pyinstaller。



pip install Pyinstaller


接下来,我们需要打开命令窗口,切换到项目目录下再执行打包命令。



pyinstaller -F -i ./img.ico 点名.py


打包常用的参数如下:




如果你也是看准了Python,想自学Python,在这里为大家准备了丰厚的免费**学习**大礼包,带大家一起学习,给大家剖析Python兼职、就业行情前景的这些事儿。



### 一、Python所有方向的学习路线

Python所有方向路线就是把Python常用的技术点做整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。



![](https://img-blog.csdnimg.cn/img_convert/9f49b566129f47b8a67243c1008edf79.png)

### 二、学习软件



工欲善其必先利其器。学习Python常用的开发软件都在这里了,给大家节省了很多时间。



![](https://img-blog.csdnimg.cn/img_convert/8c4513c1a906b72cbf93031e6781512b.png)



### 三、全套PDF电子书

书籍的好处就在于权威和体系健全,刚开始学习的时候你可以只看视频或者听某个人讲课,但等你学完之后,你觉得你掌握了,这时候建议还是得去看一下书籍,看权威技术书籍也是每个程序员必经之路。

![](https://img-blog.csdnimg.cn/img_convert/eec417a3d4d977b313558a11d3c13e43.png)



### 四、入门学习视频

我们在看视频学习的时候,不能光动眼动脑不动手,比较科学的学习方法是在理解之后运用它们,这时候练手项目就很适合了。



![](https://img-blog.csdnimg.cn/img_convert/ec690501ea1dbe2cb209cbf4013c2477.png)  

![](https://img-blog.csdnimg.cn/img_convert/3eaeaa6747419c9d86c72e0d10d0a6a2.png)



### 四、实战案例

光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。



![](https://img-blog.csdnimg.cn/img_convert/252731a671c1fb70aad5355a2c5eeff0.png)



### 五、面试资料

我们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

![](https://img-blog.csdnimg.cn/img_convert/6c361282296f86381401c05e862fe4e9.png)

成为一个Python程序员专家或许需要花费数年时间,但是打下坚实的基础只要几周就可以,如果你按照我提供的学习路线以及资料有意识地去实践,你就有很大可能成功!
最后祝你好运!!!




**网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**

**[需要这份系统化学习资料的朋友,可以戳这里无偿获取](https://bbs.csdn.net/topics/618317507)**

**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**
  • 21
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值