如何用Python制作闹铃小程序,实现思路及相关知识有什么
Admin 2022-06-21 群英技术资讯 510 次浏览
事情的第一步:理清思路。需要用到python的几个知识:1、tkinter一些函数控件,2、控件和函数之间的联系(主用TreeView控件),3、读写数据入txt文档(高级版可换为数据库),4、数据的类的封装。
需要其他方面的知识:1、简单设计界面布局,2、确保程序易于使用的不反人类细节。
考虑清楚后,那么我开始学习一下相关知识。
(1)python中作为面向对象的一份子,Class(类)和Instance(实例)的两个概念必须要清楚,
class Student(object): pass
class
后面紧接着是类名,Student
,紧接着是(object)
,表示该类是从哪个类继承下来的,如果没有合适的继承类,就使用object
类,这是所有类最终都会继承的类。
class Student(object): def __init__(self, name, score): self.name = name self.score = score
注意到__init__方法的第一个参数永远是self,表示创建的实例本身,因此,在__init__方法内部,就可以把各种属性绑定到self,因为self就指向创建的实例本身。
有了__init__方法,在创建实例的时候,就不能传入空的参数了,必须传入与__init__方法匹配的参数,但self不需要传,Python解释器自己会把实例变量传进去:
eg: Tom = Student('Bart Simpson', 59)
要定义一个方法,除了第一个参数是self外,其他和普通函数一样。要调用一个方法,只需要在实例变量上直接调用,除了self不用传递,其他参数正常传入。
PS:看了网上几个教程,有的class类出现不同的写法:
class App: class App(): class App(Frame):
需要特别说明的是,不带()与带()效果一样,而Class A(B):是继承关系,A继承了B。
(2)tkinter中ttk中的Treeview控件,
ttk.Treeview(self.frame_center, show="headings", height=18, columns=("a", "b", "c", "d", "e"))
show="heading"表示第一行是隐藏的,show="tree"表示显示第一行。
其实项目没什么难度,贴上源代码:
# coding=utf-8 import tkinter from tkinter import ttk import os,sys import time from playsound import playsound import threading import winsound class Application(): def __init__(self,master): self.master=master #master就是Tk(),也就是windows self.num01=0 # 用于两个button状态切换 self.run01=1 # 用于 启动和停止 状态切换,1为启动 self.datatxt = "日常模式_保存配置.txt" #用于 储存生成txt文件 def creatThings(self): self.myStr01 = tkinter.StringVar() #如果想让该变量成为整个Class的全局变量,则必须加self self.myStr01.set('正在运行') self.myVar01 = tkinter.IntVar() self.buttonA1=tkinter.Button(self.master,text="日常",bg='#D1EEEE',width=20,command=self.buttonA1_Func) self.buttonB2=tkinter.Button(self.master,text="特殊",bg='#D1EEEE',width=20,command=self.buttonB2_Func) self.buttonA1.pack() self.buttonB2.pack() self.label_status=tkinter.Label(self.master,text="当前状态",background="#ffffe0",width=20) self.label_status.pack() self.label_st2=tkinter.Label(self.master,bg='green', fg='yellow', font=('Arial', 12), width=10, textvariable=self.myStr01) self.label_st2.pack() self.radioButtonA1=tkinter.Radiobutton(self.master,text="启动",variable=self.myStr01,value='启动',command=self.Change_SelectionA) # 其中variable=self.myStr01, value='启动'的意思就是,当我们鼠标选中了其中一个选项,把value的值'启动'放到变量self.myStr01中,然后赋值给variable self.radioButtonB2 = tkinter.Radiobutton(self.master, text="停止",variable=self.myStr01,value='停止',command=self.Change_SelectionB) self.radioButtonA1.pack() self.radioButtonB2.pack() self.buttonC3 = tkinter.Button(self.master, text="保存当前配置",width=15,height=2,command=self.Set2Txt)# self.buttonC3.pack() self.buttonD4 = tkinter.Button(self.master, text="新建事件",width=15,height=2,command=self.New_Building) self.buttonD4.pack() def creatTree(self): treecol=["序号","时间","事件","铃声"] global tree tree=self.tree=ttk.Treeview(self.master,columns=treecol, height=10, show="headings") tree.column('0', width=50, anchor='center') # 指定第一列的宽度和名称, 如果show = "headings", 这一列就被隐藏。 tree.column('1', width=150, anchor='center') #表示列,headings时不显示 tree.column('2', width=150, anchor='center') tree.column('3', width=350, anchor='center') tree.heading('0', text='序号') tree.heading('1', text='时间') tree.heading('2', text='事件') tree.heading('3', text='铃声') self.data = {"item0": ["1", "06:20", "起床", "起床号.mp3"],"item1": ["2", "06:30", "早操", "早操号.mp3"]} tree.insert('', 'end', values=self.data["item0"]) tree.insert('', 'end', values=self.data["item1"]) #这里,使用字典不适合,无序 self.newdata = {"num01": ["", "", "", ""]} tree.pack() #这一行是必须的 tree.bind('<ButtonRelease-1>', self.Tree_Selection) print("阶段执行检测") def Gui_arrange(self): self.buttonA1.place(x=100, y=20) self.buttonB2.place(x=300, y=20) self.tree.place(x=50,y=100) self.label_status.place(x=950,y=80) self.label_st2.place(x=980,y=105) self.radioButtonA1.place(x=950,y=150) self.radioButtonB2.place(x=1050, y=150) self.buttonC3.place(x=1000,y=500) self.buttonD4.place(x=600,y=500) #各种点击函数集合: def Change_SelectionA(self): #用于点选框变更 self.label_st2.config(text=self.myStr01.get()) self.run01=1 def Change_SelectionB(self): # 用于点选框变更 self.label_st2.config(text=self.myStr01.get()) self.run01=0 def WriteToTree(self): #未完成 #清空newdata中原始数据 for item in self.tree.get_children(): self.tree.delete(item) f2=open(os.getcwd()+r"\\"+self.datatxt,'r') #读数据文件datatxt cont2=f2.readlines() #self.newdata = {"num01": ["", "", "", ""]} #当然上面这个不行 self.newdata = cont2 for i in range(len(self.newdata)): ''' for j in range(len(cont2[0])): # 取数组中一个元素的最大长度 self.newdata[i][j].replace('\'','') ''' a=self.newdata[i] b=a.replace('\'','') # b是字符串 c=b.split(',') # c变为了数组 self.tree.insert('',i,values=c) #self.tree.update() 该行好像没起什么作用 # self.tree.insert('','end',values=["1", "06:20", "起床", "起床号2.mp3"]) def New_Building(self): self.tree.insert('','end',values=["1", "06:20", "起床", "起床号2.mp3"]) def Tree_Selection(self,event): #这里的event和前面的self是同一个东东, 如果单一参数的话会报错 for item2 in tree.selection(): item_text=tree.item(item2 ,"values") #item是I001、I002 print(item_text[1:3]) print(item_text) #item1 = tree.selection()[0] #print(item1) column = tree.identify_column(event.x) #列column row=tree.identify_row(event.y) #行row print("正确的column是"+column) print("the items has been selected = ",tree.selection()) entryedit=tkinter.Text( self.master,width=40,height=2) entryedit.place( x=90,y=60) def save_edit(): print("==== = ", tree.selection()) tree.set(item2 ,column=column,value=entryedit.get(0.0,"end").replace('\n','')) # 官方手册解释 set the value of given column in given item to the specified value. entryedit.destroy() Obutton.destroy() Obutton=tkinter.Button( self.master,text="更 改",bg="gray",width=4,command=save_edit) Obutton.place( x=390,y=60) def Set2Txt(self): print("num01:",self.num01) if self.num01==0: file01= open(currentDir+'\\日常模式_保存配置.txt','w') for i in range(21): # 写入数据 #问题是如何输出当前表格数的最大行数,以后再说 try: item_text = tree.item( "I00"+str(i+1), "values") #这是针对列表写的 file01.write(str(item_text).replace("(", "").replace(")", "") + '\n') #这是针对列表写的 except: #file01.write(str(item_text).replace("(","").replace(")","")+'\n') pass file01.close() elif self.num01==1: file02= open(currentDir+'\\休息模式_保存配置.txt','w') for i in range(21): # 写入数据 #问题是如何输出当前表格数的最大行数,以后再说 try: item_text = tree.item( "I00"+str(i+1), "values") file02.write( str(item_text).replace("(", "").replace(")", "") + '\n') except: pass file02.close() def buttonA1_Func(self): self.num01 = 0 self.buttonA1['bg']='#71C671' self.buttonB2['bg'] = '#D1EEEE' print("效果生成 =0") self.datatxt="日常模式_保存配置.txt" self.WriteToTree() #导入日常模式—数据 pass def buttonB2_Func(self): self.num01 = 1 self.buttonB2['bg']='#71C671' self.buttonA1['bg'] = '#D1EEEE' print("效果生成 =1") self.datatxt = "休息模式_保存配置.txt" self.WriteToTree() # 导入休息模式—数据 pass def Test(self): print("纯测试") def Belling(self): self.num01 = 0 #日常模式0 休息模式1 #currentDir = os.getcwd() while True & self.run01==1: if self.num01 == 0: self.datatxt = "日常模式_保存配置.txt" elif self.num01 == 1: self.datatxt = "休息模式_保存配置.txt" f1 = open(os.getcwd() + r"\\" + self.datatxt, 'r') contect = f1.readlines() # contect = [] # print(contect) f1.close() t = time.localtime() now = time.strftime( "%H %M", t).split() for i in contect: print(i) print("闹铃监测正在运行中...") a = i.split( ',') #print(a[1]) # 時間 06:20 #print(a[3]) # 铃声 起床号.mp3 h = a[1].replace('\'','').replace(' ','').split(':') a2=h a3=a[ 3].replace('\'','').replace('\n','').replace(' ','') a4=(currentDir+'\\'+a3) if h[0] == now[0] and h[1] == now[1]: print("时间到!") #playsound(r'C:\Users\Jesse Eisenberg\PycharmProjects\Zidonghua\ZidonghuaExcel\一个闹铃.mp3') #playsound(a4) #playsound(currentDir + '\\' + a[3]) #采用playsound会报线程错误 a4='C:\\Users\\Jesse Eisenberg\\PycharmProjects\\Zidonghua\\ZidonghuaExcel\\一个闹铃.wav' winsound.PlaySound(a4, winsound.SND_FILENAME) time.sleep( 56) else: #time.sleep(0.5) continue def mainpro(): windows = tkinter.Tk() windows.title( "打铃系统v1.0") windows.geometry( '1200x600') windows.resizable( 0,0) #禁止更改窗口大小 app = Application(windows) app.creatTree() app.creatThings() app.Gui_arrange() app.Test() def looppro(): app.Belling() threadObj01 = threading.Thread( target=looppro) threadObj01.start() windows.mainloop() sys.exit()currentDir=os.getcwd() print("os.getcwd()=%s" % os.getcwd()) if __name__ == '__main__': print("game starts") mainpro() print("game ends") #开始之后,闹铃检测程序自动启动,点击“停止”圆框选项后,闹铃检测程序停止,在按“启动”圆框选项,程序并未启动
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
这篇文章主要个大家分享的是Python常见异常类型处理,编写程序的过程,难免会遇到一些错误,程序逻辑又或者运行与系统发生各种冲突等等,下面我们就来看看那些我们在编程中常遇到的异常都是怎么处理的吧,需要的小伙伴可以参考一下
这篇文章主要为大家介绍了python神经网络学习利用PyTorch进行回归运算的实现代码,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
这篇文章主要为大家详细介绍了基于python实现图书管理系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
这篇文章主要介绍了Python遍历目录下文件、读取、千万条数据合并详情,对文件夹和文件进行属性判断,首先对文件夹进行遍历,看文件夹里有什么样的文件,读取出文件夹中的所有文件,下面文章将详细介绍该内容,需要的小伙伴可以参考一下
python中常用的excel模块库有几种?怎样安装?学习python对excel模块有一定的了解还是很有必要的,下面我们就来看看常见的excel模块库有什么特点以及要如何安装。
成为群英会员,开启智能安全云计算之旅
立即注册Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008