使用 Wolfram Alpha API 的 Python GUI 助手

2025年1月11日 | 22 分钟阅读

Wolfram Alpha Webservice API 提供了一个基于 Web 的应用程序编程接口(API),允许将 Wolfram Alpha 的计算和表示能力集成到企业、桌面、移动和 Web 应用程序中。Wolfram Alpha 是一个能够借助 Wolfram 的算法、知识库和人工智能(AI)技术计算专家级答案的 API,这得益于 Wolfram 语言。

在下面的教程中,我们将学习如何在 Python 中构建一个可以回答简单问题的 GUI 助手应用程序。

但在我们开始构建项目之前,让我们先了解一下创建 Wolfram Alpha API ID 的过程。

创建 Wolfram Alpha API ID

以下是创建 Wolfram Alpha API ID 的分步过程。

第一步: 我们将首先在 Wolfram Alpha 的官方网站上创建一个账户。链接如下:https://account.wolfram.com/auth/create。

GUI Assistant using Wolfram Alpha API in Python

第二步: 在 Wolfram Alpha 成功注册后,我们将被重定向到“登录”页面。我们将通过输入注册的电子邮件 ID 作为 Wolfram ID 来登录。

GUI Assistant using Wolfram Alpha API in Python

现在我们将被重定向到网站的主页。

GUI Assistant using Wolfram Alpha API in Python

第三步: 我们将前往右上角的账户部分。我们将从下拉菜单中选择“我的应用 (API)”选项。

GUI Assistant using Wolfram Alpha API in Python

第四步: 现在我们将点击“获取 AppID”按钮以获取 ID。

GUI Assistant using Wolfram Alpha API in Python

第五步: 出现如下所示的对话框后,我们将输入“应用程序名称”和“描述”。

GUI Assistant using Wolfram Alpha API in Python

第六步: 现在我们将记下下一个对话框中出现的 APPID。这个 app id 将专属于该应用程序。

GUI Assistant using Wolfram Alpha API in Python

既然我们已经获得了 APPID,现在是时候在 Python 中安装 wolframalpha 包,并看看这个 API ID 的实现方式了。

如何安装 wolframalpha 包?

Python wolframalpha 包可以使用 PIP 安装程序,在命令提示符或终端中输入以下命令进行安装。

语法

安装完成后,我们可以通过创建一个新的 python 程序文件并导入 wolframalpha 模块来验证 wolframalpha 包是否已正确安装。

以下是说明相同内容的代码片段。

文件:verify.py

现在,让我们保存文件并在命令提示符或终端中运行以下命令。

语法

如果程序没有返回任何导入错误,则表示该包已成功安装。如果引发任何异常,请尝试重新安装该包并考虑查阅其官方文档。

现在让我们通过为助手应用程序创建一个命令行界面(CLI)来看看这个模块的实现。稍后我们将使用此功能,借助 Tkinter 模块来开发图形用户界面(GUI)。

“使用 Wolfram Alpha API 的助手”项目代码实现

我们将创建一个简单的助手,它将借助 Wolfram Alpha API 来回答用户的问题。

让我们看一下下面这段代码,它演示了其实现过程。

文件: my_assistant.py

说明

在上面的代码片段中,我们导入了 wolframalpha 模块。然后我们定义了一个名为 find_answer() 的函数,它将返回作为参数传递的查询的答案。在这个函数中,我们声明了一个名为 app_id 的变量,用于存储我们之前创建的 APP ID。然后我们使用存储的 APP ID 创建了 Client() 类的一个对象,并使用 query() 函数来搜索所提问题的响应,并将结果存储在 response 变量中。然后我们声明了另一个名为 answer 的变量,仅用于存储来自 response 变量的文本响应。最后,我们返回了存储在 answer 变量中的结果。

然后我们定义了主函数,使用 input() 函数向用户提问。接着我们通过传递输入的问题调用了 find_answer() 函数,并将结果存储在 answer 变量中。最后,我们为用户打印了答案。

现在让我们运行这段代码看看输出结果。

输出 1

Question: Value of pi
Answer: 3.1415926535897932384626433832795028841971693993751058209749445923...

输出 2

Question: Who is the president of US?
Answer: Joe Biden (from 20/01/2021 to present)

输出 3

Question: What is the capital of India?
Answer: New Delhi, Delhi, India

既然我们已经了解了 wolframalpha 模块的用法,现在让我们创建 GUI 并将此功能添加到其中。

项目先决条件

在 Python 中创建 GUI 助手应用程序时,我们将需要一些库和模块。这些库的简要描述如下:

  1. tkinter: tkinter 模块将允许我们为应用程序提供图形用户界面(GUI)。
  2. wolframalpha: wolframalpha 模块将允许我们利用 Wolfram 的算法、知识库和人工智能(AI)技术来计算专家级的答案。
  3. pillow: pillow 库是 Python 图像库,它允许我们向 Python 解释器添加图像处理功能。

由于 tkinter 模块是 Python 预装的,因此无需额外安装。我们也在本教程的前面部分安装了 wolframalpha 模块。我们还可以使用 PIP 安装程序安装 pillow (PIL) 库,方法是在命令提示符或终端中输入以下命令。

语法

安装完成后,我们可以通过创建一个新的 python 程序文件并导入 pillow (PIL) 模块来验证 pillow 库是否已正确安装。

以下是说明相同内容的代码片段。

文件:verify.py

现在,让我们保存文件并在命令提示符或终端中运行以下命令。

语法

如果程序没有返回任何导入错误,则表示库已成功安装。如果出现任何异常,请尝试重新安装库并考虑查看其官方文档。

现在让我们开始构建项目。

在 Python 中使用 Tkinter 和 Wolfram Alpha API 构建 GUI 助手应用程序

为了更好地理解,我们将创建这个 GUI 应用程序的完整项目代码分成了几个步骤。这些步骤如下所示:

步骤 1: 导入必要的模块

第二步: 定义执行不同操作所需的函数

步骤 3: 创建应用程序的主窗口。

步骤 4:向窗口添加必要的控件并设置事件触发器。

让我们更详细地了解上述步骤。

导入必要的模块

首先,我们将从导入所有必需的模块开始,这包括来自 tkinter 模块的所有小部件和模块,来自 PIL 模块的 ImageImageTk 模块,以及 wolframalpha 模块。

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

文件:main.py

说明

在上面的代码片段中,我们从 tkinter 模块导入了所有的控件和模块,以便处理图形用户界面。然后我们从 tkinter 模块导入了 messagebox 模块来显示一些重要的消息。接着我们从 PIL 模块导入了 ImageImageTk 模块,以便在程序中添加图像并在 Tkinter 应用程序中使用它们。最后,我们导入了 wolframalpha 模块来计算专家级的答案。

定义执行不同操作的必要函数

我们现在将定义一些函数来查找查询的结果,向用户显示结果,清除应用程序中的条目,以及关闭应用程序。

让我们详细了解这些函数的实现。

查找输入查询答案的函数

这个函数将与我们之前用来演示 wolframalpha 模块用法的函数相同。这个函数将接受一个查询形式的参数,并返回相应的答案。

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

文件:main.py

说明

在上面的代码片段中,我们定义了一个名为 find_answer() 的函数,它接受一个名为 question 的参数。我们在这个函数中声明了一个变量来存储 APP ID。然后我们使用 APP ID 创建了 Client() 类的一个对象,并使用 try-except 方法来处理可能引发的错误。我们使用 query() 函数来搜索输入查询的响应,并将相应的结果存储在 answer 变量中。

在应用程序中显示结果的函数

我们现在将定义一个函数,它将接受在输入字段中输入的查询,并调用 find_answer() 函数来显示该查询的答案。

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

文件:main.py

说明

在上面的代码片段中,我们定义了函数 compute_result()。在这个函数中,我们使用 delete() 方法清除 answer_field 中的任何先前文本。然后我们使用 get() 方法从 question_field 中检索数据,并检查输入的查询是否为空字符串。接着,我们以检索到的查询作为参数调用了 find_answer() 函数,并将返回的结果存储在 answer 变量中。我们还检查了返回的值是否不为空字符串,并使用 insert() 方法在 answer_field 字段中显示结果。我们还使用了 messagebox 模块的 showerror() 方法来显示带有 错误 消息的消息框,以指示问题所在。

重置应用程序中条目的函数

我们现在将定义一个函数来删除输入字段中的当前条目。

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

文件:main.py

说明

在上面的代码片段中,我们定义了名为 reset_entries() 的函数。在该函数内部,我们使用 delete() 方法来删除输入字段中的条目。我们还使用了 messagebox 模块的 showinfo() 方法来显示带有 成功 声明的消息框。

关闭应用程序的函数

我们现在将定义一个函数,使用 Tk() 类的 destroy() 方法来退出应用程序。

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

文件:main.py

说明

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

创建应用程序的主窗口

既然我们已经定义了运行应用程序所需的所有必要函数,现在是时候创建主窗口了,我们将在其中添加小部件并查看其功能。

我们将从创建 tkinter 模块的 Tk() 类的对象开始。这个对象将是应用程序的主窗口。我们还将为这个窗口添加标题和图标。我们还将设置窗口的几何尺寸并配置其背景颜色。

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

文件:main.py

说明

在上面的代码片段中,我们定义了主函数的代码。在这个函数中,我们实例化了 Tk() 类,并创建了应用程序的主窗口。然后我们使用 title() 函数设置了窗口的标题。我们还使用 geometry() 函数设置了窗口的大小,并通过将 resizable() 函数的参数设置为零来禁用了调整大小选项。我们借助 config() 函数将背景颜色配置为 #F0FFFF。最后,我们使用 iconbitmap() 函数设置了应用程序的图标。

向窗口添加所需的小部件并设置事件触发器

由于应用程序的主窗口已成功创建,我们将向窗口添加所有必要的控件并设置事件触发器。这些控件包括用于构建其他控件的框架、用于显示重要信息的标签、用于插入数据的输入字段以及用于操作输入数据和调用函数的按钮。

现在让我们详细了解这些控件的添加。

添加框架和图像

我们将从向主窗口添加框架开始。这些框架将有助于构建其他小部件的结构。这些框架可以使用 tkinter 模块的 Frame() 小部件创建。我们还将使用 PIL 模块的 ImageImageTk 模块将图像导入程序中。这个图像将使应用程序更具吸引力。

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

文件:main.py

说明

在上面的代码片段中,我们导入了一个图像文件,并使用 Image 模块的 open() 函数后跟 resize() 函数调整了它的大小,然后使用 ImageTk 模块的 PhotoImage() 类使其与 Tkinter 兼容。接着,我们使用 Frame() 小部件向主窗口添加了一些框架,将其 master 参数设置为我们之前创建的 Tk() 类的对象 main_win。我们还将这些框架的背景颜色设置为 #F0FFFF。最后,我们使用 pack() 函数在主窗口屏幕上设置了这些框架的位置。

向 title_frame 框架添加小部件

现在我们已经成功地将框架添加到了主窗口,是时候将所有必要的小部件添加到这些框架中了。我们将从向 title_frame 框架添加一些标签开始。这些标签将显示我们之前导入的图像以及表示应用程序标题的文本。我们将使用 Label() 小部件来创建这些标签,并借助 grid() 函数在主窗口上设置它们的位置。

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

文件:main.py

说明

在上面的代码片段中,我们使用了 Label() 小部件在主窗口上添加了一张图片和文本,并将它们的 master 参数设置为 title_frame 框架。然后,我们使用 grid() 函数以网格格式设置了这些标签在窗口上的位置。

向 input_frame 框架添加小部件

我们现在将向 input_frame 框架添加一些小部件。这些小部件包括用于显示输入字段信息的标签,以及用于输入查询和显示结果的输入字段。我们将使用 Label() 小部件添加标签,使用 Entry() 小部件添加字段到应用程序中。然后,我们将使用 grid() 函数在主窗口上设置这些小部件的位置。

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

文件:main.py

说明

在上面的代码片段中,我们使用了 Label()Entry() 小部件来添加所需的标签和输入字段,并将它们的 master 参数的值设置为 input_frame 框架。然后,我们使用 grid() 函数以网格格式在主窗口屏幕上设置了这些标签和输入字段的位置。

向 button_frame 框架添加小部件

我们现在将使用 Button() 小部件向 button_frame 框架添加一些按钮。这些按钮将允许我们查找查询的结果并生成输出,清除输入字段中的条目,以及关闭应用程序。

文件:main.py

说明

在上面的代码片段中,我们使用了 Button() 小部件向应用程序添加了一些按钮,并将它们的 master 参数设置为 button_frame 框架。我们自定义了这些按钮,并使用 command 参数来调用我们之前创建的不同函数。最后,我们使用 grid() 函数在主窗口上以网格格式设置了这些按钮的位置。

既然我们已经向应用程序添加了所有必要的小部件,是时候运行它了。

运行应用程序

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

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

文件:main.py

说明

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

因此,项目代码现在已完成。我们将保存此 python 程序文件并在命令提示符或终端中运行以下命令以查看输出。

语法

但在我们看到输出之前,下面是“使用 Wolfram Alpha API 的 GUI 助手”的完整项目代码。

完整的项目代码

以下是“在 Python 中使用 Wolfram Alpha API 的 GUI 助手”的项目代码。

文件:main.py

输出

GUI Assistant using Wolfram Alpha API in Python