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(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。