Python 中的标准 GUI 单位转换器

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

在以下教程中,我们将学习如何借助 Python 编程语言中的 Tkinter 库创建标准单位转换器。

但在我们开始构建项目之前,让我们简要讨论一下单位转换和一些相关方面。

理解单位转换

单位转换包括多个步骤,涉及乘以或除以一个数值因子,特别是转换因子。该过程还可能涉及选择适用的有效数字数量和四舍五入。有不同的转换单位用于测量不同的参数。

  1. 测量长度
  2. 测量温度
  3. 测量重量
  4. 测量容量

在数学中,我们通常进行测量单位的转换以便更好地理解。例如,我们可以用英寸来测量桌子的长度,而花园的长度则用码来评估,以便于理解。同样,用英里来测量手指的长度是没有意义的。我们可以使用测量单位来测量不同的量。

在解决不同的数学问题时,单位转换变得很有必要。例如,如果矩形的长度以英尺提供,而宽度以米提供,那么为了确定矩形的周长,我们必须转换单位以使其统一。因此,我们需要学习单位转换的概念。

单位测量转换

不同的单位用于测量不同的量。用于测量的单位如下所示

  1. 长度
  2. 面积
  3. 体积
  4. 权重
  5. 温度

下表显示了数量和用于测量每个数量的一些单位。

序号。数量单位
1长度米 (m)、英寸 (in)、英尺 (ft)、码 (yd)、英里
2面积平方米、平方英寸、平方英尺、英亩、平方码、平方英里
3体积液体盎司 (Fl oz)、品脱 (pt.)、夸脱 (qt)、加仑 (gal)
4权重盎司、磅 (lb.)、吨
5温度开尔文 (K)、摄氏度 (C)、华氏度 (F)

在最初的学习阶段,有一些非标准计量单位用于向儿童介绍单位和测量的概念,而无需他们阅读任何刻度。阅读任何刻度本身就是一项繁琐的工作,因此引入非标准测量允许儿童在进入使用标准单位进行测量的下一步之前,专注于“重”、“轻”、“长”、“短”等概念。

非标准测量的一个例子可以是手掌。手掌通常用于非正式地测量物体的长度。然而,由于涉及主观性,测量结果可能有所不同。

Standard GUI Unit Converter in Python

现在让我们考虑下面的单位转换表,它描绘了不同单位之间的关系。

序号。数量关系
1长度1 英里 = 1760 码 = 5280 英尺 = 63,360 英寸
2体积 (容量)1 加仑 = 4 夸脱 = 8 品脱 = 128 液体盎司
3重量 (质量)1 吨 = 2000 磅 = 32,000 盎司
4温度C/5 = (F - 32)/9 = (K - 273)/5

单位转换图表

单位转换图表提供了各种长度、面积、质量、体积和温度单位的转换因子,作为轻松快速计算的参考。我们可以将这些图表视为转换单位的公式,它有助于将任何给定单位的数量转换为另一个单位。

下表表示单位转换图表

长度单位转换图表

序号。Unit转换因子
11 毫米0.001 米
21 厘米0.01 米
31 分米0.1 米
41 十米10 米
51 百米100 米
61 公里1000 米
71 英寸2.54 x 10-2
81 英尺0.3048 米 / 12 英寸
91 码0.9144 米 / 3 英尺
101 英里1.609344 公里 / 1760 码 / 5280 英尺 / 63,360 英寸 / 1609.344 米

面积单位转换图表

序号。Unit转换因子
11 平方英寸6.4516 x 10-4 平方米
21 平方英尺9.2903 x 10-2 平方米
31 英亩4.0468 x 103 平方米
41 公顷1 x 104 平方米
51 平方英里2.5888 x 106 平方米
61 靶恩10 x 10-28 平方米

体积单位转换图表

序号。Unit转换因子
11 毫升0.001 升
21 厘升0.01 升
31 分升0.1 升
41 十升10 升
51 百升100 升
61 千升1000 升
71 立方英寸1.639 x 10-2
81 品脱473.16 毫升 / 0.57 升
91 夸脱946.353 毫升 / 0.946353 升 / 2 品脱
101 加仑3.785 升 / 4 夸脱 / 8 品脱 / 128 液体盎司
111 立方英尺28.316 升

质量单位转换图表

序号。Unit转换因子
11 毫克0.001 克
21 厘克0.01 克
31 分克0.1 克
41 十克10 克
51 盎司28.3495 克
61 百克100 克
71 千克1000 克
81 英石6350.29 克
91 磅453.592 克 / 0.453592 千克 / 16 盎司
101 吨907.185 千克 / 2000 磅 / 32,000 盎司

温度单位转换图表

序号。Unit转换因子
1摄氏度 (C)5 x (F - 32) / 9 = K - 273

现在我们已经学习了单位转换的基础知识,让我们开始使用 Python 编程语言中的 Tkinter 库构建一个。

使用 Tkinter 构建单位转换器

由于项目代码冗长且难以一次性理解,我们已将完整的项目代码划分为多个部分,以便更好地理解。

为了理解代码,我们将遵循以下步骤

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

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

步骤 3: 我们将定义所需的字典和列表来存储数据。

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

步骤 5: 然后我们将小部件添加到主窗口并对其应用事件触发器。

让我们详细了解这些步骤。

导入所需的库和模块

我们将首先导入项目所需的必要库和模块。对于这个项目,我们将使用 Tkinter 库,它将为应用程序提供图形用户界面。

以下代码片段演示了相同的内容:

文件:unitConverter.py

说明

在上面的代码片段中,我们为项目导入了 Tkinter 库。

定义应用程序函数

一旦我们成功导入了所需的库,就该我们定义执行应用程序所需的函数了。这些函数包括用于重置输入数据和结果值的函数,以及允许我们将特定单位转换为请求单位的函数。

首先,我们将创建一个函数来重置所有输入数据和结果。以下是说明此操作的代码片段

文件:unitConverter.py

说明

在上面的代码片段中,我们定义了一个名为 reset 的函数。在这个函数中,我们使用了 delete() 方法来删除输入字段中的条目。然后,我们使用 set() 方法将选项菜单的值设置为列表的第一个索引。最后,我们使用了 focus_set() 方法并将焦点设置到输入字段。

现在让我们定义另一个函数来将特定单位转换为请求的单位。以下代码片段演示了此操作

文件:unitConverter.py

说明

在上面的代码片段中,我们使用 get() 方法从输入条目字段中检索字符串值,并使用 float() 方法将其转换为浮点值,并将其存储在 inputVal 变量中。然后,我们从选择菜单中检索值并分别将其存储在 input_unitoutput_unit 变量中。然后,我们创建了一个所需的转换因子组合列表,以便输入和输出字段必须位于相同的单位图表中。然后,我们使用嵌套的 if-else 条件语句来检查任何请求的转换是否在上述列表中,并相应地执行操作。

将所需的数据结构添加到应用程序

现在我们将所需的​​数据结构添加到应用程序中,其中包括一个字典和一些列表。这些数据结构将存储必要的数据,例如单位及其初始值、单位转换图表和选择菜单选项。

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

文件:unitConversion.py

说明

在上面的代码片段中,我们创建了一个名为 unitDict 的字典,存储单位及其初始测量值。然后,我们创建了一些列表,将字典中的单位区分为其各自的图表。我们还有另一个列表,其中包含所有要显示为选择菜单选项的单位。

为应用程序创建主窗口

现在我们将为应用程序创建主窗口,所有必要的小部件都将在此处显示。我们将使用 Tkinter 库的 Tk() 类来创建窗口。

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

文件:unitConverter.py

说明

在上面的代码片段中,我们创建了 Tk() 类的一个实例。然后,我们使用 title()geometry() 方法设置了主窗口的标题和大小。我们还通过将 resizable() 方法的参数值设置为 0 来禁用调整大小选项。最后,我们借助 configure() 方法将背景颜色设置为 #16a085

将小部件添加到主窗口

一旦我们为应用程序创建了主窗口,就该向其中添加一些小部件了。我们将首先向窗口添加一些框架,以提供其他小部件的结构。

我们可以使用 Tkinter 库的 Frame() 小部件添加框架。以下代码片段说明了这一点。

文件:unitConverter.py

说明

在上面的代码片段中,我们使用了 Frame() 小部件为主窗口创建了框架。我们将 master 参数设置为 guiWindow,并将背景颜色设置为 #16a085

现在我们将使用 Label() 小部件添加一个标签以在主窗口上显示标题。

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

文件:unitConverter.py

说明

在上面的代码片段中,我们使用了 Label() 小部件创建了一个显示标题的标签。我们将此小部件的 master 参数设置为 header_frame 框架,文本为 - 标准单位转换器。我们还设置了字体样式为 Arial black,大小为 16。我们还设置了背景颜色为 #16a085,前景色为 #e8f6f3。最后,我们使用了 pack() 方法,并将 expand 参数的值设置为 True,将 fill 参数设置为 both,以设置标签的位置。

现在我们将创建 StringVar() 类的一些对象,以存储来自输入和输出选择菜单的数据。我们还将这些对象的初始值设置为我们之前创建的 SELECTIONS 列表的索引值 0

文件:unitConverter.py

说明

在上面的代码片段中,我们创建了 StringVar() 类的两个对象。然后,我们使用 set() 方法将对象的初始值设置为 SELECTIONS 列表的索引值 0

现在我们将使用 Label() 小部件创建一些标签,以在主窗口的主体上显示信息。

现在让我们考虑下面显示的代码片段,它说明了这一点。

文件:unitConverter.py

说明

在上面的代码片段中,我们使用了 Label() 小部件并创建了两个标签,将这些小部件的 master 参数设置为 body_frame 框架。我们向这些标签添加了文本,并将背景颜色设置为 #16a085,将前景色设置为 #d0ece7。然后,我们使用了 grid() 方法来设置上述标签的位置。

现在我们将借助 Entry() 小部件向主窗口添加一些输入字段,以输入和显示数据。

以下是说明 Entry() 小部件用法的代码片段。

文件:unitConverter.py

说明

在上面的代码片段中,我们使用了 Entry() 小部件将输入字段添加到主窗口的主体,方法是将 master 参数设置为 body_frame 框架,并将背景颜色设置为 #e8f8f5。然后,我们使用了 grid() 方法来设置上述输入字段的位置。

现在我们将使用 OptionMenu() 小部件添加选项菜单。

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

文件:unitConverter.py

说明

在上面的代码片段中,我们使用了 OptionMenu() 小部件将选项菜单添加到显示列表供用户选择。我们将这些小部件的 master 参数设置为 body_frame 框架,并将选定的数据分别存储在 input_valueoutput_value 变量中。然后,我们为这两个小部件将数据列表设置为 SELECTIONS 列表。最后,我们使用了 grid() 方法来设置这些选项菜单在主窗口上的位置。

现在我们将使用 Button() 小部件添加一些按钮。这些按钮将调用 convert()reset() 函数。

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

文件:unitConverter.py

说明

在上面的代码片段中,我们使用了 Button() 小部件创建了两个按钮。第一个按钮是 CONVERT 按钮,它将调用 convert() 函数,允许用户将给定单位转换为请求的单位。第二个按钮是 RESET 按钮,它将调用 reset() 函数以重置主窗口上的所有条目。最后,我们使用 grid() 方法设置了这些按钮的位置。

现在我们将对 Tk() 类的对象使用 mainloop() 方法来运行应用程序。

以下是演示相同内容的代码片段。

文件:unitConverter.py

说明

在上面的代码片段中,我们使用了 mainloop() 方法与 guiWindowTk() 类的对象)来运行应用程序。

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

语法

在我们看到输出之前,让我们先看看 Python 中“GUI 单位转换器”项目的完整代码。

完整的项目代码

以下是 Python 编程语言中“GUI 单位转换器”项目的代码片段。

文件:unitConverter.py

输出

Standard GUI Unit Converter in Python

结论

本教程教我们如何使用 Python 中的 Tkinter 库创建基于图形用户界面的单位转换器应用程序。我们还学习了不同的 Tkinter 库小部件和方法及其在 Python 脚本中的实现。