Python 中的简单待办事项列表 GUI 应用程序2025年3月17日 | 阅读 21 分钟 每一天,都有一系列任务在等待着我们。其中一些可能很有趣,而另一些可能很乏味。然而,完成这些任务的重要性是毋庸置疑的,特别是当它们日积月累时。 很多时候,我们可能都难以记录下需要做的事情。也许我们中的一些人习惯于使用手写的待办事项列表来提醒自己待处理的事项及其截止日期。然而,手写的笔记更容易丢失或被遗忘。既然我们是 Python 程序员,使用 Tkinter 构建一个待办事项列表管理器 GUI 应用程序就很有意义了。 在下面的教程中,我们将看到使用 Python 编程语言中的 Tkinter 库,一步步构建一个简单的待办事项列表管理器 GUI 应用程序的过程。 但在开始之前,让我们先简要了解一下什么是待办事项列表及其好处。 什么是待办事项列表?一个待办事项列表是我们需要完成的任务或想做的事情的清单。 通常,这个列表中的任务会按优先级排序。传统上,它们被写在一张纸或便利贴上,作为一种记忆辅助工具。随着技术的发展,我们已经能够使用 Excel 电子表格、Word 文档、电子邮件列表以及像 Microsoft To-Do 和 Google To-Do Lists 这样的待办事项列表应用程序来创建待办事项列表。我们可以在家庭、工作场所或个人生活中使用待办事项列表。 将所有我们应该做的事情写在一个地方,意味着我们不应该忘记任何重要的事情。通过对列表中的任务进行优先级排序,我们可以规划执行它们的顺序,并快速看出哪些需要我们立即关注,哪些任务可以推迟一段时间。 了解使用待办事项列表的优势使用待办事项列表的一个重要原因就是它能帮助我们保持条理。每当我们将所有任务写在列表上时,它们看起来会更方便管理。当我们清楚地知道哪些任务需要行动、哪些已经完成时,这有助于我们保持专注。同时,也为我们的大脑释放了空间,可以进行其他更具创造性的任务。 当我们完成一个任务时,我们可以将其标记或从列表中划掉。这给了我们一种进步和成就感,如果我们总是从一个任务匆忙地转到下一个任务,就会缺少这种感觉。如果我们有成就感,它会激励我们,促使我们继续前进。 然而,这并不是待办事项列表的唯一优势。以下是使用待办事项列表的一些优势:
现在我们已经了解了待办事项列表及其好处,是时候开始构建一个待办事项列表应用程序来管理我们的日常任务了。 使用 Tkinter 构建待办事项列表应用程序使用 Tkinter 构建待办事项列表管理应用程序的过程分为几个步骤。这些步骤如下所示: 第一步: 首先,我们将导入构建项目所需的所有模块。 第二步: 然后,我们将定义一些执行应用程序所必需的函数。 第三步: 接着,我们将为应用程序创建一个主窗口。 第四步: 之后,我们将为应用程序添加一个数据库来存储数据。 第五步: 我们将向应用程序添加必要的控件(widgets),并应用事件触发器。 第六步: 在应用程序的主函数中调用这些函数。 让我们详细讨论这些步骤。 导入所需模块在开始构建项目之前,导入应用程序运行所必需的模块非常重要。我们将从 Tkinter 库中导入所有必需的控件和模块,为应用程序提供图形用户界面。我们还将导入 sqlite3 模块来将数据存储在数据库中。 现在让我们考虑以下代码片段来演示这一点。 文件: todo_application.py 说明 在上面的代码片段中,我们将 tkinter 模块导入为 tk。然后,我们从 Tkinter 库中导入了 ttk 模块和 messagebox。最后,我们将 sqlite3 模块导入为 sql。 定义应用程序函数成功导入所需模块后,就该为我们定义各种函数来操作应用程序中的不同事件了。这些函数将允许我们向列表中添加任务、从列表中删除任务、从列表中删除所有任务、更新列表、清除列表、检索数据库以及关闭应用程序。 我们将从定义一个空列表开始,它将帮助我们存储任务。以下是演示同样操作的代码片段。 文件: todo_application.py 说明 在上面的代码片段中,我们定义了一个名为 tasks 的空列表。这个列表将允许我们存储所有输入的任务。 现在让我们定义执行应用程序所需的所有函数。 向列表中添加任务我们将为应用程序定义的第一个函数是向列表中添加任务。此函数将从输入字段中检索包含任务的字符串,并将其存储在列表和数据库中。 以下是说明该函数定义的代码片段。 文件: todo_application.py 说明 在上面的代码片段中,我们定义了一个名为 add_task 的函数。我们使用了 get() 方法从输入字段中检索字符串,并将其存储在 task_string 变量中。然后我们检查该字符串是否为空。如果 task_string 变量的长度为零,将显示一个消息框,显示 'Field is Empty'(字段为空)的消息。如果字符串不为空,我们使用 append() 方法将此字符串添加到我们之前创建的列表中。我们还使用 execute() 方法执行 SQL 语句 'insert into tasks values (?)' 并将 task_string 中的值存储到数据库中。然后我们调用了 list_update() 函数来更新列表,并借助 delete() 方法删除了输入字段中的条目。 更新列表我们现在将定义另一个函数,它允许我们更新列表并在列表框中插入条目。 让我们考虑以下说明相同内容的代码片段。 文件: todo_application.py 说明 在上面的代码片段中,我们定义了一个名为 list_update 的函数。在这个函数中,我们调用了 clear_list() 函数来清除列表。然后我们使用 for 循环遍历列表中的任务,并使用 insert() 方法将任务插入到列表框中。 从列表中删除任务我们现在将定义一个函数,用于从列表和数据库中删除选定的任务。以下是说明该操作的代码片段。 文件: todo_application.py 说明 在上面的代码片段中,我们定义了名为 delete_task 的函数。在此函数中,我们使用 try-except 方法,通过 get() 方法从列表框中获取选定的条目,并将其存储在 the_value 变量中。然后我们在任务列表中检查选定的值并将其从列表中删除。接着,我们调用 list_update() 函数来更新列表,并使用 execute() 方法执行 SQL 语句 'delete from tasks where title = ?',并从 the_value 变量中删除该值。我们还为异常情况显示了带有 'No Task Selected'(未选择任务)消息的消息框。 从列表中删除所有条目我们现在将定义一个函数,它将从列表中删除所有任务。让我们现在考虑以下演示该操作的代码片段。 文件: todo_application.py 说明 在上面的代码片段中,我们定义了一个名为 delete_all_tasks 的函数。在这个函数中,我们显示了一个消息框来请求用户的确认。然后我们使用 if 条件语句检查值是否为 True。接着我们使用 while 循环遍历任务列表的元素,并借助 pop() 方法将它们弹出。然后我们使用 execute() 方法执行 SQL 语句 'delete from tasks'。最后,我们调用 list_update() 函数来更新列表。 清空列表我们现在将定义一个函数来清空列表。以下代码片段说明了这一点。 文件: todo_application.py 说明 在上面的代码片段中,我们定义了一个名为 clear_list 的函数。在这个函数中,我们使用了 delete() 方法来删除列表框中的所有条目。 关闭应用程序我们现在将定义一个函数来关闭应用程序。我们还将在命令提示符中打印最终列表。让我们考虑以下演示同样操作的代码片段。 文件: todo_application.py 说明 在上面的代码片段中,我们定义了一个名为 close 的函数。在这个函数中,我们为用户打印了任务列表。然后我们使用 destroy() 方法来关闭应用程序。 从数据库中检索数据我们现在将定义一个函数,用于从数据库检索数据并将这些值附加到列表中。以下是说明该操作的代码片段。 文件: todo_application.py 说明 在上面的代码片段中,我们定义了一个名为 retrieve_database 的函数。在此函数中,我们使用 while 循环遍历任务列表中的元素,并借助 pop() 方法将它们弹出。然后我们使用 for 循环遍历数据库表中的行,并使用 append() 方法将表中的值插入到列表中。 为应用程序创建主窗口既然我们已经为应用程序定义了所有必要的函数,现在是时候为应用程序设计主窗口了,所有的小部件都将显示在这个窗口中。这可以通过创建 Tkinter 库的 Tk() 类的一个对象来完成。 现在让我们考虑以下代码片段来演示这一点。 文件: todo_application.py 说明 在上面的代码片段中,我们创建了 Tkinter 库的 Tk() 类的一个对象。然后我们使用 title() 方法设置了窗口的标题。接着我们使用 geometry() 方法设置了窗口的大小和位置。我们还通过将 resizable() 方法的参数设置为零来禁用了调整大小选项,以获得更好的用户界面。最后,我们使用了 configure() 方法并将窗口的背景颜色设置为 #FAEBD7。 向应用程序添加数据库我们现在将向应用程序添加数据库,它将为用户存储数据。我们将首先使用 connect() 方法连接到数据库。然后我们将创建一个游标类的对象,这将允许我们执行 SQLite 语句并从查询的结果集中获取数据。然后我们将使用 execute() 方法来执行 SQL 语句。 文件: todo_application.py 说明 在上面的代码片段中,我们使用了 connect() 方法。然后我们创建了一个 cursor 类的对象。接着我们使用 execute() 方法执行了 SQL 语句 'create table if not exists tasks (title text)'。 向应用程序添加必要的控件并应用事件触发器既然我们已经成功地为应用程序添加了数据库,现在是时候向主窗口添加必要的控件并应用基本的事件触发器了。 我们将从向主窗口添加框架开始。这些框架将为其他控件提供一个合适的结构。然后我们将在这些框架上添加一些标签来提供一些信息。接着我们将添加一个输入框,以便用户可以输入他们的任务。我们还将添加一些按钮,它们在被点击时执行特定的功能,比如向列表中添加任务、从列表中删除一个任务、从列表中删除所有任务以及关闭应用程序。我们还将添加一个列表框来显示所有输入的任务。 现在让我们详细了解其实现。 帧首先,我们将使用 tkinter 模块的 Frame() 控件向应用程序添加框架。让我们考虑以下代码片段,演示 Frame() 控件的实现。 文件: todo_application.py 说明 在上面的代码片段中,我们使用了 Frame() 控件来为应用程序定义一些框架。我们将这些控件的 master 参数设置为 guiWindow(Tk() 类的对象),并将指定背景颜色的 bg 参数设置为 "#FAEBD7"。然后我们使用了 pack() 方法将这些框架放置在应用程序中。 标签我们现在将使用 Tkinter 库的 ttk 模块的 Label() 控件向这些框架添加标签。这些标签将代表应用程序的标题和输入框的标题。 让我们在以下代码片段中理解标签的实现。 文件: todo_application.py 说明 在上面的代码片段中,我们使用了 ttk 模块的 Label() 控件来定义一个标签,将其 master 参数设置为我们之前定义的框架 header_frame。我们还设置了文本、字体样式和大小、背景色和前景色。然后我们使用了 pack() 方法并设置了此标签在窗口上的位置。接着我们使用 ttk 模块的 Label() 控件定义了另一个标签,并将其 master 参数设置为我们之前定义的另一个框架 functions_frame。我们再次设置了文本、字体样式和大小、背景色和前景色。然后我们使用了 place() 方法来设置此标签在主窗口上的位置。 输入框我们现在将使用 Tkinter 库的 ttk 模块的 Entry() 控件向应用程序添加一个输入框。这个输入框将允许我们在列表中插入任务标题。 让我们考虑以下代码片段,演示 Entry() 控件的实现。 文件: todo_application.py 说明 在上面的代码片段中,我们使用 ttk 模块的 Entry() 控件定义了一个输入框,并将此控件的 master 参数设置为我们之前定义的框架 functions_frame。我们还设置了字体样式和大小以及控件的宽度。我们还设置了输入框的背景色和前景色。然后我们使用 place() 方法将此输入框放置在应用程序中。 按钮现在是时候向应用程序添加一些按钮来执行我们之前定义的某些功能了。我们可以使用 Tkinter 库的 ttk 模块的 Button() 控件来创建这些按钮。 以下是说明按钮创建的代码片段。 文件: todo_application.py 说明 在上面的代码片段中,我们使用 ttk 模块的 Button() 控件定义了一些按钮。我们将它们的 master 参数设置为我们之前定义的框架 functions_frame。我们还设置了这些按钮将显示的文本以及每个按钮的宽度。然后我们将 command 参数的值设置为它们将调用的函数。接着我们使用 place() 方法并在主窗口上设置了它们的位置。 列表框我们现在将使用 tkinter 库的 Listbox() 控件向应用程序添加一个列表框。这个列表框将显示任务列表。让我们考虑以下代码片段,说明列表框的实现。 文件: todo_application.py 说明 在上面的代码片段中,我们使用了 tkinter 模块的 Listbox() 控件。我们将此控件的 master 参数设置为我们之前定义的框架 listbox_frame。我们设置了列表框的宽度和高度。我们还将 selectmode 参数设置为 SINGLE,以便一次只能选择一个条目。然后我们设置了背景色和前景色,以及选中项的背景色和前景色。接着我们使用 place() 方法将列表框放置在应用程序中。 调用函数我们现在将调用函数来检索数据库和更新列表。我们还将使用 mainloop() 方法来运行应用程序并建立与数据库的连接。 让我们考虑以下演示相同内容的代码片段。 文件: todo_application.py 说明 在上面的代码片段中,我们调用了 retrieve_database() 函数以及 list_update() 函数。然后我们对 Tk() 类的对象 guiWindow 使用了 mainloop() 方法来运行应用程序。接着我们使用 commit() 方法和 close() 方法建立了与数据库的连接。 至此,项目代码已完成。我们可以保存文件并在命令 shell 或终端中运行以下命令以查看输出。 语法 在我们看到输出之前,让我们先看一下 Python 中“待办事项列表 GUI 应用程序”项目的完整代码。 完整的项目代码以下是 Python 编程语言中“待办事项列表 GUI 应用程序”项目的代码片段。 文件: todo_application.py 输出 ['Exercise', 'Practice Coding', 'Complete Assignment', 'Shopping'] ![]() 下一个主题使用 Python 自动化软件测试 |
我们请求您订阅我们的新闻通讯以获取最新更新。