今天跟着油管学习创建了简单的代办事项列表应用程序,使用了python的tkinter库来制作图形用户界面(GUI)
1. 导入tkinter库
python
Copy code
import tkinter
from tkinter import *
这两行导入了tkinter模块,它是Python的标准GUI库,用于创建窗口、按钮、文本输入框等界面元素。
2. 初始化窗口
python
Copy code
root = Tk()
root.title("To-Do-List")
root.geometry("400x650+400+100")
root.resizable(False,False)
这些代码行创建了应用程序的主窗口root,设置了窗口标题、大小和位置,并禁止了窗口大小调整功能。
3. 定义全局变量和函数
task_list = []定义了一个空列表,用于存储待办事项。
addTask, deleteTask, 和 openTaskFile 函数分别用于添加、删除任务和从文件加载任务。
4. GUI元素
使用PhotoImage加载图标和图片,用于美化界面。
创建顶部栏、按钮和文本输入框等元素,以及配置它们的外观和位置。
frame和frame1用于组织布局,使得元素有序排列。
5. 待办事项列表
使用Listbox和Scrollbar显示待办事项列表,允许用户滚动查看。
6. 文件操作
代码中的文件操作(openTaskFile, 在addTask和deleteTask中操作文件)允许待办事项持久存储,即使应用关闭后再次打开也能恢复之前的任务列表。
7. 主循环
python
Copy code
root.mainloop()
这行代码启动了tkinter的事件循环,等待用户的输入事件(如点击和按键)并响应。
import tkinter
from tkinter import *
#为了创建一个简单的代事项列表应用程序,使用了'tkinter'库来制作图形用户界面(GUI)
#该模块是python的标准GUI库,用于创建窗口,按钮,文本输入框等界面元素
#初始化窗口
root = Tk()
root.title("To-Do-List")
root.geometry("400x650+400+100")
root.resizable(False,False)#禁止了窗口大小调整功能
task_list = []
#定义了一个空列表,用于存储代办事项
def addTask():
task = task_entry.get()
task_entry.delete(0,END)
if task:
with open("tasklist.txt",'a') as taskfile:
taskfile.write(f"\n{task}")
task_list.append(task)
listbox.insert( END, task)
def deleteTask():
global task_list
task = str(listbox.get(ANCHOR))
if task in task_list:
task_list.remove(task)
with open("tasklist.txt",'w') as taskfie:
for task in task_list:
taskfie.write(task+"\n")
listbox.delete( ANCHOR)
def openTaskFile():
try:
global task_list
with open("tasklist.txt","r") as taskfile:
tasks = taskfile.readlines()
for task in tasks:
if task !='\n':
task_list.append(task)
listbox.insert(END ,task)
except:
file = open('tasklist.txt','w')
file.close()
#GUI元素
#使用'PhotoImage'加载图标和图片,用于美化界面
#创建顶部栏,按钮和文本输入框等元素,以及配置它们的外观和位置
#'frame'和'frame1'用于组织布局,使得元素有序排列
#icon
Image_icon = PhotoImage(file="Image/task.png")
root.iconphoto(False,Image_icon)
#top bar
TopImage = PhotoImage(file="Image/topbar.png")
Label(root,image=TopImage).pack()
dockImage = PhotoImage(file="Image/dock.png")
Label(root,image=dockImage,bg="#32405b").place(x=30,y=25)
noteImage = PhotoImage(file="Image/task.png")
Label(root,image=noteImage,bg="#32405b").place(x=340,y=25)
heading = Label(root,text="ALL TASK",font="arial 20 bold",fg="white",bg="#32405b")
heading.place(x=130,y=20)
#main
frame = Frame(root,width=400,height=50,bg="white")
frame.place(x=0,y=180)
task = StringVar()
task_entry = Entry(frame,width=18,font="arial 20",bd=0)
task_entry.place(x=10,y=7)
task_entry.focus()
button = Button(frame,text="ADD",font="arial 20 bold",width=6,bg="#5a95ff",fg="#fff",bd=0,command=addTask)
button.place(x=300,y=0)
#listbox
frame1 = Frame(root,bd=3,width=700,height=280,bg="#32405b")
frame1.pack(pady=(160,0))
#使用'listbox'和'Scrollbar'显示代办事项列表,允许用户滚动查看
listbox = Listbox(frame1,font=('arial',12),width=40,height=16,bg="#32405b",fg="white",cursor="hand2",selectbackground="#5a95ff")
listbox.pack(side=LEFT,fill=BOTH,padx=2)
scrollbar = Scrollbar(frame1)
scrollbar.pack(side= RIGHT,fill= BOTH)
listbox.config(yscrollcommand=scrollbar.set)
scrollbar.config(command=listbox.yview)
openTaskFile()
#delete
Delete_icon = PhotoImage(file="Image/delete.png")
Button(root,image=Delete_icon,bd=0,command=deleteTask).pack(side=BOTTOM,pady=13)
root.mainloop()
知识点
1. tkinter基础
初始化和配置窗口:使用Tk()创建主窗口,设置标题(title), 窗口大小和位置(geometry), 并禁止调整大小(resizable)。
使用PhotoImage加载和显示图片:用于窗口图标、按钮和其他元素的图形化展示。
2. 控件使用
Label:显示文本或图片。
Entry:单行文本输入框,用于输入待办事项。
Button:点击按钮触发事件,如添加或删除任务。
Listbox与Scrollbar:展示待办事项列表,Scrollbar提供滚动能力。
3. 布局管理
Frame:容器控件,用于组织和包含其他控件,有助于管理复杂的布局。
pack、place:tkinter的布局管理方法,用于控制控件的位置和排列。
4. 事件处理
命令绑定:使用command参数将按钮点击事件绑定到函数。
5. 变量和数据结构
列表操作:使用列表task_list存储任务项,通过列表方法如append()和remove()管理任务项。
字符串变量:StringVar()是tkinter用于管理控件如Entry中文本的变量类型。
6. 文件操作
读写文件:使用open函数与with语句打开文件,实现任务的持久化存储。
7. 异常处理
try...except:处理尝试打开不存在的文件时的异常,避免程序崩溃。
8. 函数定义和全局变量
函数定义:addTask、deleteTask、openTaskFile等函数实现了应用的核心功能。
全局变量使用:在函数中修改全局变量前使用global关键词。