Python学习随记 ————随机抽号器(一)

第一篇博客                                                         2018-07-15


       笔者是一名学生,见到很多教师会选择用抽号的方式点名、收作业,甚至来确定期末口语考试的背诵文章,特花了几天时间,查阅了大量资料,完成了此抽号器。闲话不多说,进入正题。

界面是这样的:

功能是这样的:

  1. 随机抽取学号
  2. 结果保存至本地
  3. 修改字体及大小

代码是这样的:

  • 首先画出一个窗口:
 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应用程序。

猜你喜欢

转载自www.cnblogs.com/tanjiawei/p/9313702.html