Python 学习笔记 ---- 随机数抽取器 (I)
最编程
2024-04-08 13:49:37
...
国产数据库圈,为啥那么多水货?”
第一篇博客 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应用程序。