Tkinter 标签

Salman Mehmood 2023年1月30日 2022年5月17日
  1. 在 Tkinter 中使用 Notebook() 组件创建标签
  2. 在 Tkinter 中使用 Scrollbar 组件查看多个标签
Tkinter 标签

Python 提供了一系列 GUI 框架,可以改进 Python 中基于 GUI 的应用程序。最广泛使用的 Python 接口是 Tk 接口或 tkinter

tkinter 模块提供了各种组件,与 Python 提供的其他链接相比,这些组件可用于更快、更轻松地升级 GUI 应用程序。tkinter.ttk 模块作为现有 tk 模块的扩展。

Ttk 模块加载了 18 个组件,其中 12 个在 tkinter 模块中,例如 ButtonTest ButtonLabelCanvasFrameLabelScrollbar,等等。

我们在 Tkinter 中找到了最近添加的组件:ComboboxNotebookSizegripProgressbarSeparatorTreeview

本文演示了 ttk 模块的 Notebook 组件如何在 Tkinter 中创建一个标签。Ttk.Notebook 组件控制一组窗口并一次显示一个。

每个孩子的窗口都链接到一个标签。用户可以一次选择一个标签来查看窗口的内容。

在 Tkinter 中使用 Notebook() 组件创建标签

我们需要导入以下内容以使用 Notebook() 方法创建标签组件。

from tkinter import *
from tkinter import ttk

我们可以访问存在于 tkinter 模块中的两个 Tkinter 变体。如果你是 Python 3 的用户,请按照上述操作。

Python 2 用户应该使用下面的一个。

from Tkinter import *

如果你在这里学习如何在 Tkinter 中创建标签,我们将假设你可以创建 Tk() 对象或根窗口,因为我们不会教你如何创建 GUI 窗口或组件。我们将讨论可以帮助你的相关主题。

tabsystem = ttk.Notebook(master=None, **options)

Notebook() 采用多个参数,如下所示。

  1. master - 此参数接受 Tk() 的实例。
  2. options - 在 Notebook 方法中有多个选项可用于传递,例如 heightpaddingwidth(这些选项是可选的)。

我们需要创建 Frame 组件以使用标签。我们必须在代码中创建一个 Frame 组件作为标签。

tab1 = Frame(tabsystem)

我们可以使用 add() 方法在 GUI 上添加尽可能多的标签。

add() 需要两个参数,如下所示。

add(child, **options)
  1. child - 你使用 tabsystem 父级由 Frame 类创建的 child 组件。在我们的例子中,tab1 是一个孩子。
  2. options - add() 方法可以执行多个选项,如 stickystatepaddingtextimagecompoundunderline
tabsystem.add(tab1, text='First Tab')

我们在这段代码中传递了 tab1,由 Frame 组件创建并在 text 选项中设置标题。

现在我们将显示标签,所以我们需要使用 pack() 方法;此方法持有一个位置并显示在那里。

tabsystem.pack(expand=1, fill="both")

我们已经学习了如何创建和管理标签,所以这是完整的代码;让我们运行它。

from tkinter import *
from tkinter import ttk
# Create an instance of Tk
window = Tk()
window.title("Delftstack")

# Create a tab control that manages multiple tabs
tabsystem = ttk.Notebook(window)

# Create new tabs using Frame widget
tab1 = Frame(tabsystem)
tab2 = Frame(tabsystem)

tabsystem.add(tab1, text='First Tab')
tabsystem.add(tab2, text='Second Tab')
tabsystem.pack(expand=1, fill="both")

label = Label(tab1,text="Welcome in Delftstack")

label.grid(column=1,
           row=1,
           padx=40,
           pady=40)
label2nd = Label(tab2, text="Now we are able to see another tab")
label2nd.grid(column=1,
            row=1,
            padx=40,
            pady=40)

window.mainloop()

输出:

使用笔记本组件创建标签

在 Tkinter 中使用 Scrollbar 组件查看多个标签

本节介绍如何使用具有多个标签的 Scrollbar 组件。我们在日常生活中使用浏览器并在一个窗口中打开多个标签。

当使用 GUI 应用程序或任何软件来执行单独的活动时,我们将需要多个标签。但是当我们在一个窗口中打开很多标签时会发生什么?

我们将面临访问其他标签的困难。这就是为什么我们需要滚动条组件来查看其他标签。

我们熟悉创建标签并了解有关 Notebook 组件的所有内容,因为我们在上一节中已经学习过,因此我们将继续前进,看看如何使用滚动条查看标签。

创建 Tk() 对象后,我们将创建一个画布以在画布窗口中设置组件。

cnv = Canvas(window, borderwidth=1)

这个 Canvas 组件有两个参数。window 参数是 Tk 类的根或对象。

我们需要创建一个 Frame 组件,它将接受 cnv 画布作为其父窗口。

frame = Frame(cnv)

我们需要创建一个水平滚动条以使用 Scrollbar 组件进行水平查看。

hscrollbar = Scrollbar(window, orient="horizontal", command=cnv.xview)
hscrollbar.grid(row=1, column=0, sticky="nsew")

我们可以使用 orient 选项设置方向,command 选项指示你要显示哪种类型的视图。

在下文中,我们创建了一个循环,该循环将迭代 40 次并在每次迭代中生成一个新标签。

标签 组件也将在每个新标签中占据其位置。

for tab in range(40):
    tabs=tabsystem.add(Frame(tabsystem), text=f" Tab {tab}  ")
    label = Label(tabs, text=f"Welcome in Delftstack")

    label.grid(column=0,row=0, sticky="ew")

这个函数将允许我们查看多个标签,因此我们使用 cnv 全局变量配置画布。scrollregion 选项有助于调整可滚动区域。

我们通过了 bbox("all") 方法。它将返回坐标直到剩余的项目,并在为零后返回 None

def frame_configure(event):
    global cnv
    cnv.configure(scrollregion=cnv.bbox("all"))

使用 bind() 方法来限制框架,并且此方法将调用 frame_configure 函数,以便发生事件。

frame.bind("<Configure>", frame_configure)

源代码:

from tkinter import *
import tkinter.ttk as ttk
# Create a window
window = Tk()
# Create a canvas
cnv = Canvas(window, borderwidth=1)
frame = Frame(cnv)
# Create an object of horizontal scrollbar
hscrollbar = Scrollbar(window, orient="horizontal", command=cnv.xview)
hscrollbar.grid(row=1, column=0, sticky="nsew")

cnv.configure(xscrollcommand=hscrollbar.set)
cnv.grid(row=0, column=0, sticky="nsew")
# This method that helps to create canvas window
cnv.create_window((5,4), window=frame, anchor="nw", tags="frame")

tabsystem = ttk.Notebook(frame, width=100, height=100)
for tab in range(40):
    tabs=tabsystem.add(Frame(tabsystem), text=f" Tab {tab}  ")
    label = Label(tabs, text=f"Welcome in Delftstack")

    label.grid(column=0,row=0, sticky="ew")

tabsystem.grid(row=0, column=0, sticky="ew")

def frame_configure(event):
    global cnv
    cnv.configure(scrollregion=cnv.bbox("all"))

frame.bind("<Configure>", frame_configure)

window.mainloop()

输出:

使用滚动条组件查看多个标签

Salman Mehmood avatar Salman Mehmood avatar

Hello! I am Salman Bin Mehmood(Baum), a software developer and I help organizations, address complex problems. My expertise lies within back-end, data science and machine learning. I am a lifelong learner, currently working on metaverse, and enrolled in a course building an AI application with python. I love solving problems and developing bug-free software for people. I write content related to python and hot Technologies.

LinkedIn