Tkinter 標籤

Salman Mehmood 2023年1月30日
  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
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