Python Tkinter 切换不同页面框架的应用

17 Mar 2025 | 6 分钟阅读

Python 有许多其他GUI 框架,但只有Tkinter包含在核心库中。Tkinter有许多优点。由于Tkinter跨平台的,相同的代码可以在 Windows、macOS 和 Linux 上运行。由于 Tkinter 使用本地操作系统组件来生成视觉元素,因此使用它创建的应用程序看起来就像属于运行它们的平台一样。

尽管 Tkinter 是事实上的 Python GUI 框架,但它并非没有批评者。一个值得注意的抱怨是,使用 Tkinter 创建的 GUI 看起来过时。如果你想要一个时尚、现代的界面,Tkinter 可能不是你正在寻找的。

与其他框架相比,Tkinter轻量级且通常易于使用。这使其成为创建 Python GUI 应用程序的诱人选择,特别是对于那些不需要现代外观,并且首要目标是快速构建跨平台且功能健全的应用程序。

Python 为 GUI(图形用户界面)开发提供了多种选择。在所有GUI 方法中,Tkinter是最常用的方法。它是 Python 提供的 Tk GUI 工具包的典型 Python 接口。使用 Python 和Tkinter构建 GUI 应用程序最快、最简单的方法。Tkinter使构建 GUI变得简单。

  • 导入tkinter模块以创建 tkinter 应用程序。
  • 创建主窗口(容器)。
  • 将任意数量的控件添加到主窗口。
  • 应用控件的事件触发器

Tkinter可以像导入任何其他模块一样导入到 Python 代码中。请记住,在Python 3.x中,模块名称是“tkinter”,而在Python 2.x中是“Tkinter”。

有时,我们需要开发一个带有多个弹出对话框窗口的应用程序,也称为页面框架。这是一个将多个Tkinter页面框架连接在一起的分步教程!对于更复杂的Python GUI 应用程序,例如为虚拟实验室、教室等构建用户界面,这可以作为样板代码。

但首先,让我们简要了解一些可以在 tkinter 程序中使用的概念。

重要的 Tk 概念

前面的示例也将演示以下关键 Tk 概念

控件 (Widgets)

Tkinter 用户界面的组成部分称为控件。每个控件都表示为一个 Python 类的实例,例如ttk.Frame、ttk.Label 或 ttk.Button。

控件层次结构

控件的放置有一个层次结构。一个框架,它本身包含在根窗口中,容纳了标签按钮。每个子控件都以其父控件作为第一个参数创建,然后该参数传递给控件函数构造函数。

配置选项

控件包含配置设置,这些设置会改变它们的外观和行为,例如出现在标签和按钮中的文本。对于不同类的控件将有多种选择。

几何管理器

控件在生成时不会立即添加到用户界面。它们在用户界面中的位置由几何管理器(如 grid)控制。

事件循环

只有当Tkinter实际执行事件循环时,它才会响应用户输入、程序所做的更改,甚至刷新显示。如果您的软件未运行事件循环,您的用户界面将不会更新。

这些是可以遵循的步骤

  • 创建三个独立的页面。起始页充当主页,然后是页面一页面二
  • 为每个页面框架设计一个容器
  • 四个类。第一个是tkinterApp类,其中创建了三个框架,并定义了show_frame函数。每次用户单击按钮时都会执行此函数。
  • StartPage很简单,有两个按钮分别用于Page 1Page 2。
  • Page 1上的按钮用于Page 2,以及使用返回主页按钮返回。
  • Page 2 上的两个按钮也用于返回StartPagePage 1。
  • 这是一个简单的Tkinter框架导航程序。
  • 可以添加许多功能,并且可以将其用作更复杂应用程序的样板文件

tkinterApp类所示,StartPage充当应用程序的初始页面。此StartApp区域中有两个按钮。通过单击按钮,您可以访问按钮关联的页面。这些页面可以包含图形、图表和复杂功能。页面上还有两个按钮。按下按钮时,将执行show_frame函数,显示相应的页面。

分步解释代码

首先,我们只需要对SeaofBTCapp类进行一个小修改。这是新的完整类

我们使用configure()函数调用任何控件来了解可用的配置选项。此方法生成一个字典,其中包含有关每个控件的详细信息,包括其默认值和当前值。要仅获取每个选项的名称,请使用keys()。

在此处观察此重要更改

在这里,我们在tuple中填充我们应用程序的所有潜在页面。所有这些页面都将因此加载。我们在__init__方法中使用StartPage首先显示,但之后我们可以调用 show frame 来提高任何我们想要的附加框架或窗口。

与 HTML 表格的工作方式类似,grid()方法用于确定标签在其容器控件中的相对布局(位置)。

因此,我们提出了Page OnePage Two。这是我们新的StartPage类,因为我们需要一种从StartPage访问这些页面的方法

在这里,控件的显示方式(在其容器内)以及主应用程序窗口调整大小时的行为由可以传递给pack()方法的关键字选项/值对控制。

注意:请记住,控件只有在使用几何管理器设置其几何形状后才会显示。遗漏几何规格是一个常见的早期错误,会导致控件生成后却不显示。例如,在使用了打包器的 pack() 方法之前,控件不会显示。

我们包含了使用控制器上方的按钮PageOnePageTwo作为输入传递给 show frame 函数。

唯一剩下的就是创建PageOnePageTwo类。这些很容易创建,并且与StartPage几乎相同

在这里,按钮和它们指向的位置是唯一重要的更改。

最终,mainloop()方法会显示所有内容并持续运行,直到程序结束。

完整代码

输出

Tkinter Application to Switch Between Different Page Frames in Python
Tkinter Application to Switch Between Different Page Frames in Python
Tkinter Application to Switch Between Different Page Frames in Python