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