Rumah > pembangunan bahagian belakang > Tutorial Python > Bagaimanakah saya boleh menambah bar skrol pada kumpulan widget dalam Tkinter?

Bagaimanakah saya boleh menambah bar skrol pada kumpulan widget dalam Tkinter?

Mary-Kate Olsen
Lepaskan: 2024-12-17 06:26:25
asal
206 orang telah melayarinya

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

Menambahkan Bar Tatal pada Kumpulan Widget dalam Tkinter

Tkinter menyediakan widget bar skrol untuk menatal tetingkap secara menegak atau mendatar. Walau bagaimanapun, antara muka bar skrol hanya boleh dikaitkan dengan widget tertentu, seperti Senarai, Kotak Teks, Kanvas dan Entri. Kumpulan widget menegak atau mendatar yang ringkas boleh diletakkan dalam widget teks menggunakan kaedah window_create. Walau bagaimanapun, kaedah ini tidak mempunyai fleksibiliti untuk reka letak yang kompleks.

Penyelesaian yang lebih biasa untuk reka letak tujuan umum ialah menggunakan widget kanvas dengan bar skrol yang berkaitan. Widget kemudian dibenamkan ke dalam bingkai, yang diletakkan di dalam kanvas. Lebar dan ketinggian bingkai hendaklah ditetapkan agar sepadan dengan kawasan skrol kanvas.

Membenamkan widget dalam bingkai membolehkan peletakan menggunakan kaedah pek, letak atau grid. Pendekatan ini memastikan semua item yang dibuat dalam bingkai boleh ditatal menggunakan bar skrol.

Sebagai alternatif, melukis elemen teks terus pada kanvas juga boleh dilaksanakan. Ketinggian dan koordinat garis boleh dikira berdasarkan keperluan fon dan susun atur. Menandai item dengan maklumat lajur membolehkan pelarasan mudah bagi koordinat x dan lebar merentas lajur.

Penyelesaian Berorientasikan Objek

Berikut ialah contoh penyelesaian bingkai terbenam-dalam-kanvas menggunakan objek -pendekatan berorientasikan:

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()
Salin selepas log masuk

Penyelesaian Prosedur

Berikut ialah penyelesaian prosedur yang tidak menggunakan kelas:

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()
Salin selepas log masuk

Ringkasnya, walaupun antara muka bar skrol Tkinter mempunyai pengehadan, terdapat pelbagai pendekatan untuk menambah bar skrol pada sekumpulan widget. Dengan memahami pendekatan ini, anda boleh mengurus paparan dan tatal tetingkap Tkinter anda dengan berkesan.

Atas ialah kandungan terperinci Bagaimanakah saya boleh menambah bar skrol pada kumpulan widget dalam Tkinter?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan