python开发的著名软件公司_利用python+tkinter开发一个点名软件

from win32com.client importDispatchfrom tkinter import *

importtkinter as tkfrom PIL importImagefrom PIL importImageTkimportosimportreimportrandomfrom threading importThreadimportpythoncomimporttime

stu_path= "名单.txt" #学生名单路径

defspeaker(str):"""语音播报

:param str: 需要播放语音的文字"""speaker= Dispatch("SAPI.SpVoice")

speaker.Speak(str)classRollllcall():def __init__(self):

self.win=Tk()

self.win.title("Python课堂点名器")

self.win.iconbitmap("image/icon.ico")

self.win.geometry("750x450")

self.win.resizable(False, False)#不允许放大窗口,避免放大导致布局变形带来的麻烦

self.start = False #开始按钮的状态

#增加背景图片

img = Image.open('image/back.jpg')

img= ImageTk.PhotoImage(img, size=(650, 450))

theLabel= tk.Label(self.win, #绑定到一个框架

#justify=tk.LEFT, # 对齐方式

image=img, #加入图片

compound=tk.CENTER, #关键:设置为背景图片

font=("华文行楷", 20), #字体和字号

fg="white",

)#前景色

theLabel.place(x=0, y=0, relwidth=1, relheight=1)

self.var= tk.StringVar() #储存文字的类

self.var.set("别紧张") #设置文字

NameLabel = tk.Label(self.win, textvariable=self.var, #绑定到一个框架

justify=tk.LEFT, #对齐方式

compound=tk.CENTER, #关键:设置为背景图片

font=("华文行楷", 35), #字体和字号

fg="SeaGreen",

width=10,

)#前景色

NameLabel.place(x=280, y=100)#多选框

self.checkVar =IntVar()

Checkbutton(self.win, text="语音播放", variable=self.checkVar,

onvalue=1, offvalue=0, height=0, width=0).place(x=170, y=410)

tk.Button(self.win, text='编辑学生名单', height=0, width=0, command=self.pop_win).place(x=520, y=408)

self.theButton= tk.Button(self.win, text="开始", font=("华文行楷", 13), fg="SeaGreen", width=20,

command=self.callback)

self.theButton.place(x=300, y=360) #调整按钮的位置

self.win.mainloop()defsave_names(self, pop, t):"""保存名单内容

:param win: #弹出窗

:param t: 文本框对象"""names= t.get(0.0, "end")if re.search(",", names):

textlabel= tk.Label(pop, text="注意:名单不能使用中文逗号分隔", font=("华文行楷", 12), #字体和字号

fg="red", )

textlabel.place(y=190, x=10)else:

with open(stu_path,"w", encoding="utf-8") as f:

f.write(names)

pop.destroy()#编辑学生姓名

defpop_win(self):

pop= Tk(className='学生名单编辑') #弹出框框名

pop.geometry('450x250') #设置弹出框的大小 w x h

pop.iconbitmap("image/icon.ico")

pop.resizable(False, False)#用来编辑名单的文本框

t = tk.Text(pop, width=61, height='10')

t.place(x=10, y=10)#判断文件存不存在

result =os.path.exists(stu_path)ifresult:#存在

with open(stu_path, "r", encoding='utf-8') as f:

names= f.read().strip("\n\r\t")

t.insert("end", names)

textlabel= tk.Label(pop, text="学生名单请以,(英文状态)的逗号分隔:\n如:刘亦菲,周迅", font=("华文行楷", 12), #字体和字号

fg="SeaGreen", )

textlabel.place(y=150, x=10)#点击确定保存数据

tk.Button(pop, text='确定', height=0, width=0, command=lambda: self.save_names(pop, t)).place(y=200, x=340)

tk.Button(pop, text='取消', height=0, width=0, command=pop.destroy).place(y=200, x=400)defcallback(self):#改变开始按钮的状态

self.start = False if self.start elseTrue#开始随机名单之后修改按钮上的文字

self.theButton["text"] = "就你了"

#开启一个子线程去做操作随机名字,以及语言播报

self.t = Thread(target=self.mod_stu_name, args=(self.var, self.checkVar))

self.t.start()defmod_stu_name(self, var, checkVar):#随机读取名单中的一个

pythoncom.CoInitialize() #子线程中调用win32com 语音播放需要设置这一行

if notos.path.exists(stu_path):

var.set("请添加名单")returnNone

with open(stu_path,"r", encoding="utf-8") as f:

names= f.read().strip("\n\t\r,")if notnames:

var.set("请添加名单")returnNone

name_list= names.split(",")

random_name= ""

whileself.start:

random_name=random.choice(name_list)

var.set(random_name)#设置名字随机出现

time.sleep(0.1)

self.theButton["text"] = "开始" #选中之后将按钮重新修改成 开始

#语音播报

if checkVar.get() == 1:

speaker(random_name)if __name__ == '__main__':

Rollllcall()

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值