python写一个随机点名软件的实例
最近有个随机点名软件的需求,故写了一个,上代码:github地址
#-*-coding:utf-8-*-
#@Time:18-12-31下午4:21
#@Author:FelixWang
fromtkinterimport*
importtkinter.fontastkFont
importrandom
importgc
importos,sys
importchardet
importcopy
fromthreadingimportThread
importtime
defresource_path(relative):
"""
图片路径
:paramrelative:
:return:
"""
ifhasattr(sys,"_MEIPASS"):
returnos.path.join(sys._MEIPASS,relative)
returnos.path.join(relative)
defcenter_window(root,width,height):
"""
中心大小
:paramroot:tk对象
:paramwidth:
:paramheight:
:return:
"""
screenwidth=root.winfo_screenwidth()
screenheight=root.winfo_screenheight()
size='%dx%d+%d+%d'%(width,height,(screenwidth-width)/2,(screenheight-height)/2)
root.geometry(size)
defclear():
lb.delete(0,END)
defget_names():
names=[]
name_path=os.path.join(BASE_DIR,'name.txt')
withopen(name_path,'rb')asf:
data=f.read()
cod=chardet.detect(data)['encoding']
if'gb'instr(cod):
cod='gbk'
fornameindata.decode(cod).strip().split('\n'):
ifname.strip():
names.append(name.strip())
returnnames
classMyThread(Thread):
def__init__(self):
self.ifdo=False
self.auto_choise=False
self.is_auto=-1
super().__init__()
defrun(self):
whileTrue:
ifself.is_autoisTrue:
whileself.ifdo:
index=random.randint(0,len(names)-1)
echo["text"]=names[index]
root.update_idletasks()
time.sleep(1/23-0.003)
self.is_auto=-1
elifself.is_autoisFalse:
ifself.auto_choise:
self.auto()
self.is_auto=-1
time.sleep(0.1)
defstop(self):
"""
手动抽奖时点击停止按钮时的操作
:return:
"""
ifself.is_auto:
self.ifdo=False
button2["text"]='手动抽奖'
pict['image']=huaji_gif
_name=random.choice(names)
echo["text"]=_name
lb.insert(END,_name)
root.update_idletasks()
root.update()
forxinlocals().keys():
dellocals()[x]
gc.collect()
pict['image']=huaji_gif
scrolly.update()
defgo(self):
"""
手动开始时的停止标记
:return:
"""
ifself.is_auto==-1:
self.is_auto=True
self.ifdo=True
pict["image"]=huang_gif
button2["text"]='点击停止'
defauto_start(self):
"""
自动开始设置更改标记
:return:
"""
ifself.is_auto==-1:
self.is_auto=False
self.auto_choise=True
pict["image"]=huang_gif
button["text"]='先别点我'
globalft1
ft1=tkFont.Font(family='Fixdsys',size=80,weight=tkFont.BOLD)
defauto(self):
"""
自动开始时执行的操作
:return:
"""
copy_names=copy.deepcopy(names)
ren=int(v.get())
foriinrange(ren):
forainrange(23):
index=random.randint(0,len(names)-1)
echo["text"]=random.choice(names)
root.update_idletasks()
time.sleep(1/23-0.003)
choise_name=copy_names.pop(random.choice(range(len(copy_names))))
echo["text"]=choise_name
lb.insert(END,choise_name)
ifi==ren-1:
pict['image']=huaji_gif
button["text"]='开始抽奖'
forainrange(5):
root.update()
time.sleep(0.06)
root.update_idletasks()
forxinlocals().keys():
dellocals()[x]
gc.collect()
scrolly.update()
self.auto_choise=False
flag=False
defname2():
globalflag
flag=notflag
ifflag:
tr.go()
else:
tr.stop()
defname():
tr.auto_start()
try:
BASE_DIR=os.path.dirname(os.path.abspath(__file__))
names=get_names()
root=Tk()
root.title("随机抽奖器(by王以涛)")
center_window(root,570,160)
ft=tkFont.Font(family='Fixdsys',size=40,weight=tkFont.BOLD)
ft1=tkFont.Font(family='Fixdsys',size=80,weight=tkFont.BOLD)
echo=Label(root,text='随机抽奖',font=ft,width=8)#默认显示
echo.grid(row=1,column=1,columnspan=2)
scrolly=Scrollbar(root)
scrolly.grid(row=1,column=5,rowspan=2,ipady=30)
lb=Listbox(root,yscrollcommand=scrolly.set,exportselection=False,height=6)
lb.grid(row=1,column=3,rowspan=2,columnspan=2,pady=0)
scrolly['command']=lb.yview
#button=Button(root,text='删除所选名字',command=lambdax=lb:x.delete(ACTIVE))
#button.grid(row=3,column=3)
button=Button(root,text='删除所有名字',command=clear)
button.grid(row=3,column=4)
v=StringVar()
Scale(root,from_=1,to=len(names),resolution=1,orient=HORIZONTAL,variable=v).grid(row=2,column=1,columnspan=2)
#抽奖时的图片
data_dir=os.path.join(BASE_DIR,"img")
huaji_gif=PhotoImage(file=resource_path(os.path.join(data_dir,'huaji.gif')))
huang_gif=PhotoImage(file=resource_path(os.path.join(data_dir,'huang.gif')))
pict=Label(root,image=huaji_gif)
pict.grid(row=1,column=0,rowspan=3)
button=Button(root,text='自动抽奖',command=name)
button.grid(row=3,column=1,columnspan=1)
flag=False
button2=Button(root,text='手动抽奖',command=name2)
button2.grid(row=3,column=2,columnspan=1)
tr=MyThread()
tr.setDaemon(True)
tr.start()
root.mainloop()
exceptExceptionase:
print('错误信息',e)
time.sleep(60)
效果如下:
以上这篇python写一个随机点名软件的实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。