使用 Tkinter 視窗上的網格管理器實現捲軸


Tkinter 是一個標準的 Python GUI 庫,它簡化了 GUI 開發,但在網格佈局中加入捲軸可能會很困難。本教程將幫助您瞭解如何在網格佈局中輕鬆實現捲軸,以增強基於 Tkinter 的應用程式的視覺吸引力和功能。

瞭解網格管理器

Tkinter 的網格管理器以表格結構組織小部件,允許開發人員建立靈活且響應式的佈局。網格管理器簡化了小部件在行和列中的放置,提供了一種方便的方式來構建 GUI。

首先,確保您已安裝 Tkinter -

pip install tk

現在,讓我們深入瞭解使用網格管理器實現捲軸的步驟。

步驟 1:匯入 Tkinter

我們匯入 tkinter 和 ttk(主題 Tkinter)以提高美觀性和新增其他小部件。

import tkinter as tk
from tkinter import ttk

步驟 2:建立 Tkinter 視窗

此程式碼初始化主 Tkinter 視窗並設定其標題。

root = tk.Tk()
root.title("Scrollable Grid Example")

步驟 3:為網格佈局建立一個框架

我們使用 ttk.Frame 來容納我們的網格佈局。sticky="nsew" 引數確保框架隨視窗擴充套件。

frame = ttk.Frame(root)
frame.grid(row=0, column=0, sticky="nsew")

步驟 4:建立畫布和捲軸

在這裡,我們設定了一個連線到畫布的垂直捲軸。yscrollcommand 確保捲軸控制畫布的垂直滾動。

canvas = tk.Canvas(frame)
scrollbar = ttk.Scrollbar(frame, orient="vertical", command=canvas.yview)
canvas.configure(yscrollcommand=scrollbar.set)

步驟 5:為可滾動內容建立一個框架

畫布內的此框架將包含可滾動內容。

content_frame = ttk.Frame(canvas)

步驟 6:配置畫布和可滾動內容框架

此繫結在內容框架大小發生變化時調整畫布滾動區域。

content_frame.bind("<Configure>", lambda e: canvas.configure(scrollregion=canvas.bbox("all")))

步驟 7:將小部件新增到內容框架

在此步驟中,我們將示例小部件新增到內容框架。根據您的應用程式需求自定義此部分。

label = ttk.Label(content_frame, text="Scrollable Content")
label.grid(row=0, column=0, pady=10)

for i in range(1, 21):
   button = ttk.Button(content_frame, text=f"Button {i}")
   button.grid(row=i, column=0, pady=5)

步驟 8:建立視窗調整大小配置

這些配置確保視窗及其元件在調整大小時按比例擴充套件。

root.columnconfigure(0, weight=1)
root.rowconfigure(0, weight=1)
frame.columnconfigure(0, weight=1)
frame.rowconfigure(0, weight=1)

步驟 9:將小部件打包到視窗上

在這裡,我們將畫布和捲軸打包到視窗上,捲軸位於畫布旁邊。

canvas.create_window((0, 0), window=content_frame, anchor="nw")
canvas.grid(row=0, column=0, sticky="nsew")
scrollbar.grid(row=0, column=1, sticky="ns")

步驟 10:將畫布繫結到滑鼠滾輪事件

此繫結允許使用者使用滑鼠滾輪滾動。

def _on_mousewheel(event):
   canvas.yview_scroll(int(-1 * (event.delta / 120)), "units")

canvas.bind_all("<MouseWheel>", _on_mousewheel)

步驟 11:執行 Tkinter 事件迴圈

最後,啟動 Tkinter 事件迴圈以顯示視窗。

root.mainloop()

綜合起來

下面是在 Tkinter 視窗中使用網格管理器新增捲軸的完整實現示例 -

示例

import tkinter as tk
from tkinter import ttk

# Step 2: Create the Tkinter Window
root = tk.Tk()
root.title("Scrollable Grid Example")
root.geometry("720x250")

# Step 3: Create a Frame for Grid Layout
frame = ttk.Frame(root)
frame.grid(row=0, column=0, sticky="nsew")

# Step 4: Create a Canvas and Scrollbar
canvas = tk.Canvas(frame)
scrollbar = ttk.Scrollbar(frame, orient="vertical", command=canvas.yview)
canvas.configure(yscrollcommand=scrollbar.set)

# Step 5: Create a Frame for Scrollable Content
content_frame = ttk.Frame(canvas)

# Step 6: Configure the Canvas and Scrollable Content Frame
content_frame.bind("<Configure>", lambda e: canvas.configure(scrollregion=canvas.bbox("all")))

# Step 7: Add Widgets to the Content Frame
# Example widgets (replace with your own)
label = ttk.Label(content_frame, text="Scrollable Content")
label.grid(row=0, column=0, pady=10)

for i in range(1, 21):
   button = ttk.Button(content_frame, text=f"Button {i}")
   button.grid(row=i, column=0, pady=5)

# Step 8: Create Window Resizing Configuration
root.columnconfigure(0, weight=1)
root.rowconfigure(0, weight=1)
frame.columnconfigure(0, weight=1)
frame.rowconfigure(0, weight=1)

# Step 9: Pack Widgets onto the Window
canvas.create_window((0, 0), window=content_frame, anchor="nw")
canvas.grid(row=0, column=0, sticky="nsew")
scrollbar.grid(row=0, column=1, sticky="ns")

# Step 10: Bind the Canvas to Mousewheel Events
def _on_mousewheel(event):
   canvas.yview_scroll(int(-1 * (event.delta / 120)), "units")

canvas.bind_all("<MouseWheel>", _on_mousewheel)

# Step 11: Run the Tkinter Event Loop
root.mainloop()

輸出

以上程式碼建立了一個簡單的 Tkinter 視窗,其中包含一個可滾動的網格佈局,其中包含標籤和按鈕。

結論

在 Tkinter 中使用網格管理器實現捲軸為在 GUI 應用程式中管理可滾動內容提供了有效的解決方案。透過結合網格管理器、畫布和捲軸元件,開發人員可以建立響應式且使用者友好的介面。

更新於: 2024-02-15

3K+ 瀏覽量

開啟你的 職業生涯

透過完成課程獲得認證

開始學習
廣告