Heim >Backend-Entwicklung >Python-Tutorial >Wie füge ich in Tkinter eine Bildlaufleiste zu einer Gruppe von Widgets hinzu?

Wie füge ich in Tkinter eine Bildlaufleiste zu einer Gruppe von Widgets hinzu?

Barbara Streisand
Barbara StreisandOriginal
2024-12-26 20:25:18815Durchsuche

How to Add a Scrollbar to a Group of Widgets in Tkinter?

Hinzufügen einer Bildlaufleiste zu einer Gruppe von Widgets in Tkinter

Übersicht

Die Bildlaufleistenfunktionalität von Tkinter ist auf bestimmte Widgets beschränkt. ausgenommen Frame- und Root-Widgets. Um diese Einschränkung zu überwinden, sind alternative Ansätze erforderlich.

Frame-Embedded-in-Canvas-Ansatz

  • Erstellen Sie ein Canvas-Widget und verknüpfen Sie Bildlaufleisten damit it.
  • Betten Sie einen Frame ein, der die Beschriftungs-Widgets enthält Leinwand.
  • Stellen Sie den Bildlaufbereich der Leinwand so ein, dass er der Größe des Rahmens entspricht.

Objektorientierte Lösung

import tkinter as tk

class Example(tk.Frame):
    def __init__(self, parent):

        # Initialize frame
        tk.Frame.__init__(self, parent)

        # Create canvas and scrollbar
        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)

        # Pack widgets
        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")

        # Bind frame's <Configure> event to update scroll region
        self.frame.bind("<Configure>", self.onFrameConfigure)

        # Populate with data
        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()

Verfahrenslösung

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()

Das obige ist der detaillierte Inhalt vonWie füge ich in Tkinter eine Bildlaufleiste zu einer Gruppe von Widgets hinzu?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn