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

2023年7月3日10:08:50

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

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

模拟器 教你如何用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是必须的哦~否则可能会出现乱码。。。

 

  • 作者:安城安教具
  • 原文链接:https://ananjiaoju.blog.csdn.net/article/details/122660961
    更新时间:2023年7月3日10:08:50 ,共 7238 字。