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