首頁 >後端開發 >Python教學 >如何在 Tkinter 中的一組小工具中新增捲軸?

如何在 Tkinter 中的一組小工具中新增捲軸?

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-12-17 06:26:25209瀏覽

How can I add a scrollbar to a group of widgets in Tkinter?

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

Tkinter 提供了用於垂直或水平滾動視窗的滾動條小部件。但是,捲軸介面只能與特定的小部件關聯,例如List、Textbox、Canvas 和Entry。可以使用 window_create 方法將簡單的垂直或水平小部件組放置在文字小部件內。然而,這種方法缺乏複雜佈局的靈活性。

通用佈局的更常見解決方案是使用帶有關聯滾動條的畫布小部件。然後將小部件嵌入到放置在畫布內的框架中。框架的寬度和高度應設定為與畫布的滾動區域相符。

將小部件嵌入框架中允許使用 pack、place 或 grid 方法進行放置。這種方法確保框架內建立的所有項目都可以使用捲軸滾動。

或者,直接在畫布上繪製文字元素也是可行的。行高和座標可以根據字體和佈局要求計算。使用列資訊標記項目可以輕鬆調整跨列的 x 座標和寬度。

物件導向的解決方案

這裡是使用物件的框架嵌入畫布解決方案的範例面向方法:

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的捲軸介面有局限性,但有多種方法可以將捲軸添加到一組小部件。透過了解這些方法,您可以有效地管理 Tkinter 視窗的顯示和捲動。

以上是如何在 Tkinter 中的一組小工具中新增捲軸?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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