preload-image

模拟器 教你如何用python制作随机点名器

老师在上课的时候经常需要点名回答问题,但是遇到选择困难症,可以说非常尴尬。。。

因此,我开发了一款随机点名器,可以帮助点名:

模拟器 教你如何用python制作随机点名器

 首先我们展示一下效果,先在database.csv文件中存放一些人名信息:

模拟器 教你如何用python制作随机点名器

 将该csv文件存放到和py文件一个目录的文件夹里:

模拟器 教你如何用python制作随机点名器

 接下来展示效果:

随机点名器

可以看到,每次可以随机选取一个人的名字,而且不会重复哦~~~

那么这个软件是如何实现的呢?

全局变量:

MAINLIST=[] YYY=None

界面代码:

class basedesk():#底板     def __init__(self, master):         global YYY         self.master = master         self.master.title("随机点名系统")         self.master.configure(bg='#B1FFF9')         self.master.geometry("1370x730")         YYY=mainwindow(self.master) class mainwindow():#主界面     def __init__(self, master):         self.master = master         data_name = os.path.join(os.path.dirname(__file__), 'database.csv')         with open(data_name) as f:             f_csv=csv.reader(f)             self.data=[]             for row in f_csv:                 self.data.append(row)         self.condition=0         self.i = 0         self.j=0         self.stop_check = False         self.master.name_label = tk.Label(self.master, text="姓名:", font=("Helvetic", 30, "bold"), relief="raised",cursor="heart").place(x=10,y=10)         self.master.picname_entry = tk.Entry(self.master,font=("Calibri",80),justify='center')         self.master.picname_entry.place(x=150, y=10, width=900, height=450)         self.master.picname_entry.insert(0,"准备点名")         self.master.submit_btn = tk.Button(self.master, text="开始", font=("Helvetic", 30, "bold"), bg='lightgreen',command=self.transformer)         self.master.submit_btn.place(x=50, y=600)         self.master.stop_btn = tk.Button(self.master, text="退出", font=("Helvetic", 30, "bold"), bg='red',command=self.stop)         self.master.stop_btn.place(x=200, y=600)         self.master.developername_label=tk.Label(self.master,text='',font=("Helvetic",20, "bold"),bg='#B1FFF9').place(x=900,y=600)         self.master.already_label=tk.Label(self.master,text='已点姓名:',font=("Helvetic",20, "bold"),bg='#B1FFF9').place(x=1100,y=10)         self.window3 = tk.Frame(self.master, bg='#63F034')         self.window3.place(x=1100, y=60, width=200, height=470)         self.window3.xscrollbar = Scrollbar(self.window3, orient=HORIZONTAL)         self.window3.yscrollbar = Scrollbar(self.window3)         self.window3.submitted_listbox = tk.Listbox(self.window3)         self.window3.xscrollbar.pack(side=BOTTOM, fill=X)         self.window3.yscrollbar.pack(side=RIGHT, fill=Y)         self.window3.submitted_listbox.place(x=0, y=0, width=182, height=452)         self.window3.xscrollbar.config(command=self.window3.submitted_listbox.xview)         self.window3.yscrollbar.config(command=self.window3.submitted_listbox.yview)         self.window3.submitted_listbox.config(xscrollcommand=self.window3.xscrollbar.set, yscrollcommand=self.window3.yscrollbar.set)

 退出键功能逻辑:

    def stop(self):         root.destroy()

 选取姓名功能逻辑群

    def different(self,):         self.master.picname_entry.delete(0, END)         self.master.picname_entry.insert(0, random.choice(self.data))     def factory1(self):         self.different()         self.i += 1         self.j += 1         if self.i == len(self.data):             self.i = 0         if self.stop_check==True :             self.factory2()             self.stop_check = False         else:             t = Timer(0.05, self.factory1)             t.start()     def factory2(self):         self.master.picname_entry.delete(0, END)         while True:             choosed=random.choice(self.data)             if choosed not in MAINLIST:                 break         MAINLIST.append(choosed)         self.window3.submitted_listbox.delete(0,END)         for i in MAINLIST:             self.window3.submitted_listbox.insert(END,i)         self.master.picname_entry.insert(0, i)         self.master.stopper_btn.destroy()         self.master.submit_btn = tk.Button(self.master, text="开始", font=("Helvetic", 30, "bold"), bg='lightgreen', command=self.transformer)         self.master.submit_btn.place(x=50, y=600)     def stopper(self):         self.stop_check=True     def refresher(self):         self.window3.submitted_listbox.delete(0, END)         for i in MAINLIST:             self.window3.submitted_listbox.insert(END, self.data[i])     def transformer(self):         if len(self.data)==len(MAINLIST):             messagebox.showerror('错误', '已经点完啦~')             return         self.master.submit_btn.destroy()         self.master.stopper_btn = tk.Button(self.master, text="停止", font=("Helvetic", 30, "bold"), bg='yellow',command=self.stopper)         self.master.stopper_btn.place(x=50, y=600)         self.condition =1         self.j=0         self.factory1()

 最后展示完整代码:

# encoding:gbk from tkinter import * from tkinter import messagebox from mttkinter import mtTkinter as tk import os,csv,random from threading import Timer MAINLIST=[] YYY=None class basedesk():#底板     def __init__(self, master):         global YYY         self.master = master         self.master.title("随机点名系统")         self.master.configure(bg='#B1FFF9')         self.master.geometry("1370x730")         YYY=mainwindow(self.master) class mainwindow():#主界面     def __init__(self, master):         self.master = master         data_name = os.path.join(os.path.dirname(__file__), 'database.csv')         with open(data_name) as f:             f_csv=csv.reader(f)             self.data=[]             for row in f_csv:                 self.data.append(row)         self.condition=0         self.i = 0         self.j=0         self.stop_check = False         self.master.name_label = tk.Label(self.master, text="姓名:", font=("Helvetic", 30, "bold"), relief="raised",cursor="heart").place(x=10,y=10)         self.master.picname_entry = tk.Entry(self.master,font=("Calibri",80),justify='center')         self.master.picname_entry.place(x=150, y=10, width=900, height=450)         self.master.picname_entry.insert(0,"准备点名")         self.master.submit_btn = tk.Button(self.master, text="开始", font=("Helvetic", 30, "bold"), bg='lightgreen',command=self.transformer)         self.master.submit_btn.place(x=50, y=600)         self.master.stop_btn = tk.Button(self.master, text="退出", font=("Helvetic", 30, "bold"), bg='red',command=self.stop)         self.master.stop_btn.place(x=200, y=600)         self.master.developername_label=tk.Label(self.master,text='',font=("Helvetic",20, "bold"),bg='#B1FFF9').place(x=900,y=600)         self.master.already_label=tk.Label(self.master,text='已点姓名:',font=("Helvetic",20, "bold"),bg='#B1FFF9').place(x=1100,y=10)         self.window3 = tk.Frame(self.master, bg='#63F034')         self.window3.place(x=1100, y=60, width=200, height=470)         self.window3.xscrollbar = Scrollbar(self.window3, orient=HORIZONTAL)         self.window3.yscrollbar = Scrollbar(self.window3)         self.window3.submitted_listbox = tk.Listbox(self.window3)         self.window3.xscrollbar.pack(side=BOTTOM, fill=X)         self.window3.yscrollbar.pack(side=RIGHT, fill=Y)         self.window3.submitted_listbox.place(x=0, y=0, width=182, height=452)         self.window3.xscrollbar.config(command=self.window3.submitted_listbox.xview)         self.window3.yscrollbar.config(command=self.window3.submitted_listbox.yview)         self.window3.submitted_listbox.config(xscrollcommand=self.window3.xscrollbar.set, yscrollcommand=self.window3.yscrollbar.set)     def stop(self):         root.destroy()     def different(self,):         self.master.picname_entry.delete(0, END)         self.master.picname_entry.insert(0, random.choice(self.data))     def factory1(self):         self.different()         self.i += 1         self.j += 1         if self.i == len(self.data):             self.i = 0         if self.stop_check==True :             self.factory2()             self.stop_check = False         else:             t = Timer(0.05, self.factory1)             t.start()     def factory2(self):         self.master.picname_entry.delete(0, END)         while True:             choosed=random.choice(self.data)             if choosed not in MAINLIST:                 break         MAINLIST.append(choosed)         self.window3.submitted_listbox.delete(0,END)         for i in MAINLIST:             self.window3.submitted_listbox.insert(END,i)         self.master.picname_entry.insert(0, i)         self.master.stopper_btn.destroy()         self.master.submit_btn = tk.Button(self.master, text="开始", font=("Helvetic", 30, "bold"), bg='lightgreen', command=self.transformer)         self.master.submit_btn.place(x=50, y=600)     def stopper(self):         self.stop_check=True     def refresher(self):         self.window3.submitted_listbox.delete(0, END)         for i in MAINLIST:             self.window3.submitted_listbox.insert(END, self.data[i])     def transformer(self):         if len(self.data)==len(MAINLIST):             messagebox.showerror('错误', '已经点完啦~')             return         self.master.submit_btn.destroy()         self.master.stopper_btn = tk.Button(self.master, text="停止", font=("Helvetic", 30, "bold"), bg='yellow',command=self.stopper)         self.master.stopper_btn.place(x=50, y=600)         self.condition =1         self.j=0         self.factory1() if __name__ == '__main__':#主函数     root = tk.Tk()     root.resizable(False, False)     basedesk(root)     root.mainloop()

 值得注意的是,最上面的# encoding:gbk是必须的哦~否则可能会出现乱码。。。

 

Back-To-Top