第一篇博客 2018-07-15
笔者是一名学生,见到很多教师会选择用抽号的方式点名、收作业,甚至来确定期末口语考试的背诵文章,特花了几天时间,查阅了大量资料,完成了此抽号器。闲话不多说,进入正题。
界面是这样的:
功能是这样的:
- 随机抽取学号
- 结果保存至本地
- 修改字体及大小
代码是这样的:
- 首先画出一个窗口:
1 def __init__(self): 2 chuangkou= Tk() 3 chuangkou.title("随机抽取学号") 4 chuangkou.geometry('800x500') 5 6 menu=Menu(chuangkou) 7 8 submenuwenjian=Menu(menu,tearoff=0) 9 submenuwenjian.add_command(label="保存到",command=self.lingcunwei,font=("宋体",12,"normal")) 10 menu.add_cascade(label="文件",menu=submenuwenjian,font=("宋体",12,"normal")) 11 12 geshi=Menu(menu,tearoff=0) 13 geshi.add_command(label="字体",command=self.zitichuang,font=("宋体",12,"normal")) 14 menu.add_cascade(label="格式",menu=geshi,font=("宋体",12,"normal")) 15 16 submenubangzhu=Menu(menu,tearoff=0) 17 submenubangzhu.add_command(label="使用说明",command=self.shiyongshuoming,font=("宋体",12,"normal")) 18 submenubangzhu.add_command(label="关于",command=self.guanyu,font=("宋体",12,"normal")) 19 menu.add_cascade(label="帮助",menu=submenubangzhu,font=("宋体",12,"normal")) 20 21 menu.add_command(label="退出",command=chuangkou.quit,font=("宋体",12,"normal")) 22 23 chuangkou.config(menu=menu) 24 25 frame1 = Frame(chuangkou) 26 frame1.pack() 27 zhanghaolabel = Label(frame1, text = "总人数:",font=("宋体",20,"normal")) 28 self.name1 = StringVar() 29 zhanghaoEntry = Entry(frame1, textvariable = self.name1,font=("宋体",18,"normal")) 30 mimalabel = Label(frame1, text = "抽取人数:",font=("宋体",20,"normal")) 31 self.name2 = StringVar() 32 mimaEntry = Entry(frame1, textvariable = self.name2,font=("宋体",18,"normal")) 33 zhucebutton = Button(frame1, text = "随机抽取",font=("宋体",20,"normal"),command = self.chouqu) 34 zhanghaolabel.grid(row = 1, column = 1) 35 zhanghaoEntry.grid(row = 1, column = 2) 36 mimalabel.grid(row = 2, column = 1) 37 mimaEntry.grid(row = 2, column = 2) 38 zhucebutton.grid(row = 3, column = 2) 39 40 frame2 = Frame(chuangkou) 41 frame2.pack(fill=BOTH,expand=1) 42 self.xianshibeichouquText=Text(frame2,font=("宋体",24,"bold")) 43 self.xianshibeichouquText.pack(fill=BOTH,expand=1) 44 45 gundongtiaoY=Scrollbar(self.xianshibeichouquText) 46 self.xianshibeichouquText['yscrollcommand']=gundongtiaoY.set 47 48 gundongtiaoY.pack(side=RIGHT,fill=Y) 49 gundongtiaoY.config(command=self.xianshibeichouquText.yview) 50 51 chuangkou.mainloop()
接着就是每个模块的方法:
抽取号码模块:
1 def chouqu(self): 2 self.xianshibeichouquText.delete(1.0,tkinter.END) 3 liebiao = [ ] 4 count=1 5 try: 6 renshu=int(self.name1.get()) 7 chouqurenshu=int(self.name2.get()) 8 if renshu<chouqurenshu: 9 chouqurenshu=renshu 10 except ValueError: 11 tkinter.messagebox.showerror("错误", "请输入整数") 12 while count <= chouqurenshu: 13 a=randint(1,renshu) 14 if a not in liebiao: 15 liebiao.append(a) 16 count=count+1 17 self.xianshibeichouquText.insert(END,"本次共随机抽取"+str(chouqurenshu)+"人\n") 18 self.xianshibeichouquText.insert(END,"随机抽到学号如下:\n") 19 for b in str(sorted(liebiao)): 20 if b != "[" and b!="]" : 21 if b==",": 22 self.xianshibeichouquText.insert(END,"号\n") 23 else: 24 self.xianshibeichouquText.insert(END,b) 25 self.xianshibeichouquText.insert(END,"号\n") 26 liebiao = [ ]
结果存入本地模块:
def lingcunwei(self): global filename f=asksaveasfilename(initialfile="抽取名单.txt",defaultextension=".txt") filename=f fh=open(f,'w') msg=self.xianshibeichouquText.get(1.0,END) fh.write(msg) fh.close()
更改子体模块:
1 def yingyongziti(self): 2 self.xianshibeichouquText['font']=(self.zitichosen.get(),self.daxiaochosen.get(),self.getchuandizixing()) 3 4 def getchuandizixing(self): 5 zixing=["常规","normal","粗体","bold","倾斜","italic"] 6 self.b="normal" 7 for a in enumerate(zixing): 8 if self.zixingchosen.get()==a[1]: 9 self.b=zixing[a[0]+1] 10 return self.b
以上就是主要源代码,完整源代码稍后上传
下篇文章将写一下如何将写好的抽号器打包为.exe应用程序。