# 基于Python编写一个点名器的示例代码

> 作者/来源: UCloud 运营管理员
> 发布时间: 2022-12-14T09:29:00.000Z
> 分类: 其他
> 标签: AI, Python
> 原文链接: http://117.50.162.249:3000/yun/articles/2067

---

# 基于Python编写一个点名器的示例代码

> 来源: https://www.ucloud.cn/yun/128425.html
> 作者: 89542767
> 发布日期: 发布于2022-12-14 17:29

今天，小编给大家去做一个详细的介绍，介绍的内容是涉及到Python的，主要还是利用这门语言去进行编程，我们可以利用这门语言，去编写一个示例器的代码，具体的代码，下文给大家贴了出来。

**前言**

　　想起小学的时候老师想点名找小伙伴回答问题的时候，老师竟斥巨资买了个点名器。今日无聊便敲了敲小时候老师斥巨资买的点名器。

　　本人姓白，就取名小白点名器啦，嘿嘿

　　代码包含：添加姓名、查看花名册、使用指南、随机抽取名字的功能（完整源码在最后）

**主界面**

　　定义主界面。使用“w+”模式创建test.txt文件（我添加了个背景图片，若不需要可省略）

```
　　#打开时预加载储存在test.txt文件中的花名册
　　namelist=[]
　　with open("test.txt","r")as f:
　　for line in f.readlines():
　　line=line.strip('n')
　　namelist.append(line)
　　win=Tk()
　　win.title('小白点名器')
　　win.geometry('500x300')
　　#定义画布，添加背景图片
　　canvas=Canvas(win,width=500,height=300)
　　img_obj=PhotoImage(file=r"C:UsersgeDownloadsIMG_202206307919_png.png")#需输入照片路径
　　image=canvas.create_image(250,0,anchor="n",image=img_obj)
　　canvas.pack()
　　a=StringVar()
　　b=StringVar()
　　b.set('开始')
　　#定义可变文本信息
　　Label1=Label(win,textvariable=a,font=('黑体',100)).place(y=60,x=65)
　　#定义四个按钮
　　Button1=Button(win,textvariable=b,font=('等线',30),command=zhuanzhuan).place(y=210,x=190)
　　Button2=Button(win,text='添加姓名',font=('等线',20),command=addname).place(x=50,y=0)
　　Button3=Button(win,text='查看',font=('等线',20),command=chakan).place(x=230,y=0)
　　Button4=Button(win,text='指南',font=('等线',20),command=zhinan).place(x=360,y=0)
　　win.mainloop()
```

**添加姓名**

　　定义添加姓名界面，每添加一次姓名就保存到test.txt文件中，判断输入是否为空（添加提示框）、判断花名册是否为空。

```
　　#定义添加姓名界面
　　def addname():
　　global Entry1
　　window=Tk()
　　window.title('姓名添加器')
　　window.geometry('400x200+500+200')
　　Label11=Label(window,text='请在下方输入你要添加的姓名',font=('黑体',18),anchor='center').place(y=30,x=25)
　　Entry1=Entry(window,font=('等线',30),width=70)
　　Entry1.place(y=80,x=70,width=200,height=80)
　　Button3=Button(window,text='确认',font=('等线',18),command=addname1).place(x=300,y=80,height=80)
　　#每添加一次姓名就保存到test.txt文件中
　　def addname1():
　　global namelist#声明为全局变量实时更新
　　if len(Entry1.get())==0:
　　tkinter.messagebox.showinfo('提示','姓名输入不能为空哦')
　　else:
　　if len(Entry1.get())==2:
　　zhongjian=list(Entry1.get())[::1]
　　zhongjian1=zhongjian[0]+''+zhongjian[1]
　　if len(namelist)==0:
　　nam=zhongjian1
　　else:
　　nam='n'+zhongjian1
　　else:
　　if len(namelist)==0:
　　nam=str(Entry1.get())
　　else:
　　nam='n'+str(Entry1.get())
　　with open("test.txt","a")as f:
　　f.write(nam)
　　tip='姓名:'+Entry1.get()+'添加成功'
　　tkinter.messagebox.showinfo('提示',tip)
　　print(nam)
　　namelist=[]
　　with open("test.txt","r")as f:
　　for line in f.readlines():
　　line=line.strip('n')
　　namelist.append(line)
```

**查看花名册**

　　这个比较简单，使用Text来显示字典内的信息即可

```
　　def chakan():
　　window=Tk()
　　window.title('花名册查看')
　　window.geometry('350x200+500+200')
　　console=Text(window,font=('等线',11))
　　console.place(y=20,x=35,width=280,height=170)
　　console.insert(1.0,namelist)
```

**使用指南**

　　同上，使用Text显示

```
　　def zhinan():
　　window=Tk()
　　window.title('小白点名器使用指南')
　　window.geometry('350x230+500+200')
　　console=Text(window,font=('等线',11))
　　console.place(y=20,x=35,width=280,height=190)
```

　　console.insert(1.0,'欢迎使用小白点名器1.0n你可以在”添加姓名按钮上输入你要添加的名字n你可以在”查看“按钮中查看花名册中所有的名字'

　　'n你可以在此程序同级的名为”花名册.txt“的文件夹中直接批量添加、删减姓名(使用回车做分隔)n--------------------------------n'

　　'(指南之外)此程序在CSDN中已开源,欢迎访问我的博客：晋升阁n需要合作的可加我微信：baijinge1137')

**名字转动功能**

　　判断“开始”、“停止”状态。定义线程。启用一个线程

```
　　#判断状态
　　def zhuanzhuan():
　　if b.get()=='开始':
　　b.set('停止')
　　elif b.get()=="停止":
　　b.set('开始')
　　_thread.start_new_thread(xiancheng,())#启用一个线程来转动姓名
　　#定义一个线程
　　def xiancheng():
　　global xuanzhong
　　while b.get()=='停止':
　　try:
　　xuanzhong=random.choice(namelist)
　　a.set(xuanzhong)
　　Label1.updata()#刷新数据
　　time.sleep(0.3)#0.3秒刷新一次
　　except:
　　continue
　　time.sleep(0.3)
　　a.set(xuanzhong)
```

**完整代码**

　　提示：我的项目是在主界面添加了背景图片的，若是不需要添加背景图片可删掉90-94行代码。若是需要添加背景图片的需注意路径地址是否正确

```
　　import random
　　import time
　　from tkinter import*
　　import _thread
　　import tkinter.messagebox
　　def zhuanzhuan():
　　if b.get()=='开始':
　　b.set('停止')
　　elif b.get()=="停止":
　　b.set('开始')
　　_thread.start_new_thread(xiancheng,())#启用一个线程来转动姓名
　　def xiancheng():
　　global xuanzhong
　　while b.get()=='停止':
　　try:
　　xuanzhong=random.choice(namelist)
　　a.set(xuanzhong)
　　Label1.updata()
　　time.sleep(0.3)
　　except:
　　continue
　　time.sleep(0.3)
　　a.set(xuanzhong)
　　def addname1():
　　global namelist#声明为全局变量实时更新
　　if len(Entry1.get())==0:
　　tkinter.messagebox.showinfo('提示','姓名输入不能为空哦')
　　else:
　　if len(Entry1.get())==2:
　　zhongjian=list(Entry1.get())[::1]
　　zhongjian1=zhongjian[0]+''+zhongjian[1]
　　if len(namelist)==0:
　　nam=zhongjian1
　　else:
　　nam='n'+zhongjian1
　　else:
　　if len(namelist)==0:
　　nam=str(Entry1.get())
　　else:
　　nam='n'+str(Entry1.get())
　　with open("test.txt","a")as f:
　　f.write(nam)
　　tip='姓名:'+Entry1.get()+'添加成功'
　　tkinter.messagebox.showinfo('提示',tip)
　　print(nam)
　　namelist=[]
　　with open("test.txt","r")as f:
　　for line in f.readlines():
　　line=line.strip('n')
　　namelist.append(line)
　　def chakan():
　　window=Tk()
　　window.title('花名册查看')
　　window.geometry('350x200+500+200')
　　console=Text(window,font=('等线',11))
　　console.place(y=20,x=35,width=280,height=170)
　　console.insert(1.0,namelist)
　　def zhinan():
　　window=Tk()
　　window.title('小白点名器使用指南')
　　window.geometry('350x230+500+200')
　　console=Text(window,font=('等线',11))
　　console.place(y=20,x=35,width=280,height=190)
　　console.insert(1.0,'欢迎使用小白点名器1.0n你可以在”添加姓名按钮上输入你要添加的名字n你可以在”查看“按钮中查看花名册中所有的名字'
　　'n你可以在此程序同级的名为”花名册.txt“的文件夹中直接批量添加、删减姓名(使用回车做分隔)n--------------------------------n'
　　'(指南之外)此程序在CSDN中已开源,欢迎访问我的博客：晋升阁n需要合作的可加我微信：baijinge1137')
　　def addname():
　　global Entry1
　　window=Tk()
　　window.title('姓名添加器')
　　window.geometry('400x200+500+200')
　　Label11=Label(window,text='请在下方输入你要添加的姓名',font=('黑体',18),anchor='center').place(y=30,x=25)
　　Entry1=Entry(window,font=('等线',30),width=70)
　　Entry1.place(y=80,x=70,width=200,height=80)
　　Button3=Button(window,text='确认',font=('等线',18),command=addname1).place(x=300,y=80,height=80)
　　namelist=[]
　　with open("test.txt","r")as f:
　　for line in f.readlines():
　　line=line.strip('n')
　　namelist.append(line)
　　win=Tk()
　　win.title('小白点名器')
　　win.geometry('500x300')
　　canvas=Canvas(win,width=500,height=300)
　　img_obj=PhotoImage(file=r"C:UsersgeDownloadsIMG_202206307919_png.png")#背景图片路径，若不需要添加将85—88行删掉即可
　　image=canvas.create_image(250,0,anchor="n",image=img_obj)
　　canvas.pack()
　　a=StringVar()
　　b=StringVar()
　　b.set('开始')
　　Label1=Label(win,textvariable=a,font=('黑体',100)).place(y=60,x=65)
　　Button1=Button(win,textvariable=b,font=('等线',30),command=zhuanzhuan).place(y=210,x=190)
　　Button2=Button(win,text='添加姓名',font=('等线',20),command=addname).place(x=50,y=0)
　　Button3=Button(win,text='查看',font=('等线',20),command=chakan).place(x=230,y=0)
　　Button4=Button(win,text='指南',font=('等线',20),command=zhinan).place(x=360,y=0)
　　win.mainloop()
```

　　综上所述，这篇内容就给大家介绍到这里了，希望可以给大家带来帮助。