首頁 >後端開發 >Python教學 >如何為 Tkinter 標籤網格新增捲軸?

如何為 Tkinter 標籤網格新增捲軸?

Susan Sarandon
Susan Sarandon原創
2024-12-17 15:26:10739瀏覽

How to Add a Scrollbar to a Grid of Tkinter Labels?

在Tkinter 中向一組小組件添加滾動條

概述

Tkinter 為List 等小組件提供捲軸、文字方塊、畫布和條目。但是,顯示帶有捲軸的標籤小部件網格可能具有挑戰性,因為這些小部件本身不支援捲軸。

解決方案

1.使用window_create 的文字小工具:

  • 使用window_create 方法建立文字小部件並添加標籤小部件。
  • 此方法很簡單,但限制了佈局複雜性。

2.有嵌入框架的畫布:

  • 建立一個有捲軸的畫布小部件。
  • 在畫布中嵌入一個框架,並將標籤小部件放置在框架內。
  • 確定框架的寬度和高度並設定畫布的scrollregion選項以符合這些尺寸。

3。在畫布上直接繪圖:

  • 建立一個繼承自 tk.Frame 的自訂類別來管理捲軸和畫布。
  • 將標籤小部件放置在嵌入框架內。
  • 綁定事件以根據框架的配置調整滾動區域

物件導向的解決方案:

import tkinter as tk

class Example(tk.Frame):
    def __init__(self, parent):
        tk.Frame.__init__(self, parent)
        self.canvas = tk.Canvas(self, borderwidth=0, background="#ffffff")
        self.frame = tk.Frame(self.canvas, background="#ffffff")
        self.vsb = tk.Scrollbar(self, orient="vertical", command=self.canvas.yview)
        self.canvas.configure(yscrollcommand=self.vsb.set)

        self.vsb.pack(side="right", fill="y")
        self.canvas.pack(side="left", fill="both", expand=True)
        self.canvas.create_window((4,4), window=self.frame, anchor="nw", tags="self.frame")

        self.frame.bind("<Configure>", self.onFrameConfigure)

        self.populate()

    def populate(self):
        for row in range(100):
            tk.Label(self.frame, text="%s" % row, width=3, borderwidth="1", relief="solid").grid(row=row, column=0)
            t = "this is the second column for row %s" % row
            tk.Label(self.frame, text=t).grid(row=row, column=1)

    def onFrameConfigure(self, event):
        self.canvas.configure(scrollregion=self.canvas.bbox("all"))

if __name__ == "__main__":
    root = tk.Tk()
    example = Example(root)
    example.pack(side="top", fill="both", expand=True)
    root.mainloop()

製程解決方案:

import tkinter as tk

def populate(frame):
    for row in range(100):
        tk.Label(frame, text="%s" % row, width=3, borderwidth="1", relief="solid").grid(row=row, column=0)
        t = "this is the second column for row %s" % row
        tk.Label(frame, text=t).grid(row=row, column=1)

def onFrameConfigure(canvas):
    canvas.configure(scrollregion=canvas.bbox("all"))

root = tk.Tk()
canvas = tk.Canvas(root, borderwidth=0, background="#ffffff")
frame = tk.Frame(canvas, background="#ffffff")
vsb = tk.Scrollbar(root, orient="vertical", command=canvas.yview)
canvas.configure(yscrollcommand=vsb.set)

vsb.pack(side="right", fill="y")
canvas.pack(side="left", fill="both", expand=True)
canvas.create_window((4,4), window=frame, anchor="nw")

frame.bind("<Configure>", lambda event, canvas=canvas: onFrameConfigure(canvas))

populate(frame)

root.mainloop()

以上是如何為 Tkinter 標籤網格新增捲軸?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn