Tkinter 标签
Python 提供了一系列 GUI 框架,可以改进 Python 中基于 GUI 的应用程序。最广泛使用的 Python 接口是 Tk
接口或 tkinter
。
tkinter
模块提供了各种组件,与 Python 提供的其他链接相比,这些组件可用于更快、更轻松地升级 GUI 应用程序。tkinter.ttk
模块作为现有 tk
模块的扩展。
Ttk
模块加载了 18 个组件,其中 12 个在 tkinter
模块中,例如 Button
、Test Button
、Label
、Canvas
、Frame
、Label
、Scrollbar
,等等。
我们在 Tkinter 中找到了最近添加的组件:Combobox
、Notebook
、Sizegrip
、Progressbar
、Separator
和 Treeview
。
本文演示了 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()
采用多个参数,如下所示。
master
- 此参数接受Tk()
的实例。options
- 在Notebook
方法中有多个选项可用于传递,例如height
、padding
和width
(这些选项是可选的)。
我们需要创建 Frame
组件以使用标签。我们必须在代码中创建一个 Frame
组件作为标签。
tab1 = Frame(tabsystem)
我们可以使用 add()
方法在 GUI 上添加尽可能多的标签。
add()
需要两个参数,如下所示。
add(child, **options)
child
- 你使用tabsystem
父级由Frame
类创建的child
组件。在我们的例子中,tab1
是一个孩子。options
-add()
方法可以执行多个选项,如sticky
、state
、padding
、text
、image
、compound
、underline
。
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()
输出:
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