Rumah >pembangunan bahagian belakang >Tutorial Python >Bagaimana untuk Menambah Bar Tatal pada Grid Label Tkinter?

Bagaimana untuk Menambah Bar Tatal pada Grid Label Tkinter?

Susan Sarandon
Susan Sarandonasal
2024-12-17 15:26:10739semak imbas

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

Menambahkan Bar Tatal pada Kumpulan Widget dalam Tkinter

Gambaran Keseluruhan

Tkinter menyediakan bar skrol untuk widget seperti Senarai , Kotak Teks, Kanvas dan Entri. Walau bagaimanapun, memaparkan grid widget label dengan bar skrol boleh mencabar kerana widget ini tidak menyokong bar skrol secara asli.

Solutions

1. Widget Teks dengan window_create:

  • Buat widget teks dan tambah widget label menggunakan kaedah window_create.
  • Kaedah ini mudah tetapi mengehadkan kerumitan reka letak.

2. Kanvas dengan Bingkai Terbenam:

  • Buat widget kanvas dengan bar skrol dilampirkan padanya.
  • Benamkan bingkai dalam kanvas dan letakkan widget label anda di dalam bingkai.
  • Tentukan lebar dan ketinggian bingkai dan tetapkan pilihan scrollregion bagi kanvas untuk memadankan dimensi ini.

3. Lukisan Terus pada Kanvas:

  • Buat kelas tersuai yang diwarisi daripada tk.Frame untuk mengurus bar skrol dan kanvas.
  • Letakkan widget label anda dalam bingkai terbenam.
  • Ikatan peristiwa untuk melaraskan kawasan skrol berdasarkan konfigurasi bingkai perubahan.

Penyelesaian Berorientasikan Objek:

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

Penyelesaian Prosedur:

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

Atas ialah kandungan terperinci Bagaimana untuk Menambah Bar Tatal pada Grid Label Tkinter?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn