Rumah >pembangunan bahagian belakang >Tutorial Python >Bagaimanakah saya boleh menambah bar skrol pada kumpulan widget dalam Tkinter, terutamanya apabila berurusan dengan sejumlah besar label yang dijana daripada data fail log?
Tidak dapat memasukkan bar skrol dengan paparan besar label yang dijana daripada log data fail menimbulkan cabaran dalam Tkinter. Isu ini timbul disebabkan oleh pengehadan bar skrol kepada jenis widget tertentu, tidak termasuk yang digunakan untuk memaparkan grid widget.
Berbilang penyelesaian wujud untuk mengatasi pengehadan ini. Untuk paparan menegak atau mendatar yang lebih ringkas, widget teks yang digabungkan dengan kaedah window_create memberikan pilihan yang berdaya maju. Walau bagaimanapun, ini mungkin tidak mencukupi untuk susun atur yang lebih rumit. Kaedah yang lebih komprehensif melibatkan penggunaan widget kanvas dengan bar skrol yang berkaitan. Benamkan bingkai yang mengandungi widget label dalam kanvas ini. Dengan melaraskan pilihan scrollregion untuk memadankan dimensi bingkai, anda mendayakan penatalan widget dengan berkesan.
Menggabungkan widget ke dalam bingkai dan bukannya terus ke dalam kanvas adalah berfaedah kerana bar skrol kanvas hanya boleh memanipulasi item yang dicipta melalui kaedah tertentu. Pembungkusan, peletakan atau pengikatan item ke kanvas tidak dikenali untuk tujuan menatal. Bingkai, walau bagaimanapun, membenarkan kaedah ini dalam hadnya, dan penciptaan tetingkap seterusnya menghasilkan kemasukan bingkai.
Melukis elemen teks terus ke kanvas ialah pilihan lain . Pendekatan ini memerlukan penentuan ketinggian garis fon, yang kemudiannya mentakrifkan koordinat-y untuk setiap item teks. Koordinat X kekal tetap berdasarkan item terluas dalam setiap lajur. Menandai item mengikut lajur membolehkan pelarasan pada semua item dalam lajur melalui satu arahan.
Di bawah ialah pelaksanaan berorientasikan objek bagi bingkai-tertanam-dalam-kanvas penyelesaian:
Contoh kelas(tk.Bingkai):
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): '''Put in some fake data''' 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): '''Reset the scroll region to encompass the inner frame''' self.canvas.configure(scrollregion=self.canvas.bbox("all"))
jika nama == "__main__":
root=tk.Tk() example = Example(root) example.pack(side="top", fill="both", expand=True) root.mainloop()
Berikut ialah penyelesaian alternatif tanpa menggunakan a kelas:
def populate(bingkai):
'''Put in some fake data''' 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(kanvas):
'''Reset the scroll region to encompass the inner frame''' canvas.configure(scrollregion=canvas.bbox("all"))
akar = tk.Tk()
kanvas = 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("
isi(bingkai)
root.mainloop()
Atas ialah kandungan terperinci Bagaimanakah saya boleh menambah bar skrol pada kumpulan widget dalam Tkinter, terutamanya apabila berurusan dengan sejumlah besar label yang dijana daripada data fail log?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!