使用 Tkinter 在 Python 中创建 GUI 日历

2025年3月17日 | 阅读 15 分钟

用 Python 构建项目是一件令人兴奋的事情。Python 提供了不同的模块和库,可以使项目更具交互性。其中一个特性是图形用户界面 (GUI),可以使用 Tkinter、PyQt5、Kivy 等 Python 库添加到项目中。Tkinter 库是设计交互式 GUI 应用程序最常用的库之一。它轻量级且易于使用。我们可以在 Windows、Linux 和 macOS 等不同的平台或操作系统上操作这个库。

在接下来的教程中,我们将学习如何使用 Python 编程语言中的 Tkinter 库来构建一个基于 GUI 的日历。

那么,让我们开始吧。

使用 Tkinter 构建 GUI 日历

为了开始在 Python 中构建 GUI 日历,我们将遵循下面显示的步骤:

步骤 1: 我们将导入所需的库和模块。

步骤 2: 然后我们将定义应用程序执行所需的函数。

步骤 3: 然后我们将创建应用程序的主窗口。

步骤 4: 我们将向主窗口添加小部件并应用事件触发器。

现在让我们详细了解上述步骤。

导入所需的库和模块

首先,我们将导入必要的库和模块,包括用于为应用程序添加 GUI 的 tkinter 库,来自 PIL 库的 ImageTkImage 模块,用于获取年份数据的 calendar 模块,以及来自 datetime 模块的 date 模块,用于获取当前月份和年份。

让我们考虑以下演示相同内容的代码片段。

文件:guiCalendar.py

说明

在上面的代码片段中,我们已经从 tkinter 库导入了所有方法、类和小部件。然后我们从 PIL 库导入了 ImageTkImage 模块。然后我们导入了 calendar 模块。最后,我们从 datetime 库导入了 date 模块。

定义应用程序的函数

导入所需的库和模块后,我们将向程序添加一些函数来执行特定功能并与应用程序交互。这些函数将向用户显示数据、重置输入并关闭应用程序。

我们将首先定义第一个函数来显示日历。现在让我们看一下演示相同内容的以下代码片段。

文件:guiCalendar.py

说明

在上面的代码片段中,我们定义了一个名为 displayCalendar 的函数。此函数允许我们打印月份和年份的日历。我们已经从 spin box 中获取了月份和年份数据,并将它们存储在不同的变量(即 monthyear)中作为整数值。然后我们使用 calendar 模块的 month() 方法检索月份详细信息并将其存储在另一个变量 output_calendar 中。然后我们使用 delete() 方法删除了文本字段中先前的输出。最后,我们使用 insert() 方法将生成的日历插入到文本字段中。

现在让我们定义另一个函数来重置应用程序中的值和结果。以下代码片段演示了这一点。

文件:guiCalendar.py

说明

在上面的代码片段中,我们定义了一个名为 reset 的函数。在此函数中,我们使用 delete() 方法删除文本字段中的输出。然后我们将 IntVar 对象的**值**设置为当前月份和年份。然后我们使用 config() 方法在 spinbox 对象上,并将它们的 textvariable 参数**值**设置为上述 IntVar 对象。

现在我们将定义另一个函数来关闭应用程序。让我们看一下演示相同内容的以下代码片段。

文件:guiCalendar.py

说明

在上面的代码片段中,我们定义了一个名为 close 的函数。在此函数中,我们使用 destroy() 方法和 Tk() 类的对象来关闭应用程序。

创建应用程序的主窗口

现在我们将创建应用程序的主窗口,以显示所有小部件和用户输出。我们将首先创建一个 Tkinter 库的 Tk() 类的对象。然后我们将设置标题、大小、位置、背景颜色和位图图标,使其更具吸引力。

现在让我们考虑以下代码片段来演示这一点。

文件:guiCalendar.py

说明

在上面的代码片段中,我们创建了 Tk() 类的对象,它将代表应用程序的主窗口。然后我们使用 title() 方法为**主窗口**设置标题。我们还使用 geometry() 方法设置了主窗口的大小和位置,并通过将 resizable() 方法的参数设置为 0 来禁用可调整大小的选项。我们还使用 configure() 方法设置了背景颜色,并使用 iconbitmap() 方法设置了位图图标。我们使用 ICO 文件将图标图像导入到应用程序中。

向主窗口添加小部件并应用事件触发器

现在我们将向主窗口添加一些小部件,包括用于为其他小部件提供适当结构的框架、用于在应用程序中显示信息的标签、用于输入月份和年份详细信息的 spin box、用于显示输出的文本字段以及用于触发特定事件的一些按钮。

我们将首先向应用程序添加框架。这些框架将帮助我们提供一个定义明确的结构来容纳其他小部件。我们将使用 Frame() 小部件创建一个。

让我们考虑以下演示相同内容的代码片段。

文件:guiCalendar.py

说明

在上面的代码片段中,我们使用 Frame() 小部件创建了一些框架,并将它们的 master 参数设置为 Tk() 类的对象,即 guiWindow。我们将它们的背景颜色在 bg 参数中设置为 #B0E0E6。然后我们使用 pack() 方法设置了框架在应用程序中的位置。我们将 expand 参数设置为 True,将 fill 参数设置为 both,以便框架可以在提供空间的两侧扩展。

现在我们将向应用程序添加不同的标签。我们将首先创建一个标签,在主窗口上显示标题;然后我们将创建另一个标签来显示图像。我们还将添加另外两个标签来显示月份和年份信息。我们将使用 Label() 小部件来创建这些标签。

让我们看一下演示每个标签创建的以下代码片段。

文件:guiCalendar.py

说明

在上面的代码片段中,我们使用 Label() 方法创建了一个用于显示标题的标签。我们将此标签的 master 参数设置为 header_frame。我们还设置了文本、字体样式和大小、背景颜色和前景颜色。然后我们使用 pack() 方法设置了标签的位置。

文件:guiCalendar.py

说明

在上面的代码片段中,我们使用 Image 模块的 open() 方法从目录导入图像。然后我们使用 resize() 方法调整图像大小,使其适合应用程序。我们还为图像使用了 ANTIALIAS 滤镜。然后我们使用 ImageTk 模块的 PhotoImage() 方法使导入的图像与 Tkinter 兼容。然后我们使用 Label() 小部件创建了一个标签来显示导入的图像。我们将此小部件的 master 参数设置为 header_frame 框架。我们还**将此标签的 image 参数**设置为导入的图像。最后,我们使用 pack() 方法将标签的位置设置在主窗口上。

文件:guiCalendar.py

说明

在上面的代码片段中,我们使用 Label() 方法创建了两个标签,用于显示 spin box 输入月份和年份的详细信息。我们将这些标签的 master 参数设置为 entry_frame 框架。我们还设置了文本、字体大小和样式、背景颜色和前景颜色。然后我们使用 place() 方法将这些标签的位置设置在主窗口上。

现在我们已经添加了应用程序所需的所有标签,是时候创建一些 spin box 来输入数据了。我们将使用 Spinbox() 小部件来创建 spin box。但首先,我们将创建 IntVar 类的对象。这些对象将存储当前月份和年份的值,并在应用程序执行时在 spin box 中显示它们。

让我们考虑以下演示相同内容的代码片段。

文件:guiCalendar.py

说明

在上面的代码片段中,我们创建了一些 IntVar 类的对象,并将它们的 master 参数设置为 entry_frame 框架。然后我们使用 today() 方法检索当前日期,并使用 monthyear 属性获取当前月份和年份,并将它们存储在单独的变量中。然后我们使用 set() 方法将这些**值**设置到 IntVar 类的对象中。然后我们使用 Spinbox() 小部件创建用于输入月份和年份的 spin box。我们将 master 参数设置为 entry_frame 框架。我们还设置了这些 spin box 的范围以及宽度。我们还使用 textvariable 参数将这些 spin box 的初始**值**设置为 IntVar 对象中存储的当前月份和变量。最后,我们使用 place() 方法设置了这些 spin box 的位置。

现在我们将使用 Text() 小部件创建一个文本框。这个文本框将显示日历。

让我们考虑以下演示相同内容的代码片段。

文件:guiCalendar.py

说明

在上面的代码片段中,我们使用 Text() 小部件创建了一个显示日历的文本框。我们将 master 参数设置为 result_frame 框架,将 widgetheight 参数分别设置为 208。我们还为文本设置了字体样式和大小。我们还使用 relief 参数将边框类型设置为 RIDGE,并将 borderwidth 参数设置为 2。最后,我们使用 pack() 方法设置了文本框的位置。

现在我们将向应用程序添加一些按钮,这些按钮将允许我们显示日历、重置输入和输出以及关闭应用程序。这些按钮可以使用 Button() 小部件创建。我们还将在此小部件中使用 command 参数,并调用我们之前创建的函数。

让我们考虑以下演示相同内容的代码片段。

文件:guiCalendar.py

说明

在上面的代码片段中,我们使用 Button() 小部件为应用程序创建了一些按钮。我们将这些小部件的 master 参数设置为 button_frame 框架。我们还包含了必要的文本、背景颜色和前景颜色。然后我们使用 command 参数并将**值**设置为我们之前定义的函数,这些函数在被点击时最终会被调用。最后,我们使用 place() 方法设置了按钮的位置。

现在我们将使用 mainloop() 方法和 Tk() 类的对象来运行应用程序。以下代码片段说明了这一点。

文件:guiCalendar.py

说明

在上面的代码片段中,我们使用 mainloop() 方法以及 guiWindow (Tk() 类的对象)。

至此,项目代码已完成。我们可以保存文件并在命令 shell 或终端中运行以下命令以查看输出。

语法

在查看输出之前,让我们看一下 Python 中“GUI Calendar”项目的完整代码。

完整的项目代码

以下是 Python 编程语言中“GUI Calendar”项目的代码片段。

文件:guiCalendar.py

输出

GUI Calendar using Tkinter in Python