Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimanakah saya boleh mencipta bingkai boleh tatal dalam Tkinter menggunakan kanvas dan bar skrol?

Bagaimanakah saya boleh mencipta bingkai boleh tatal dalam Tkinter menggunakan kanvas dan bar skrol?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-11-26 08:57:12997semak imbas

How can I create a scrollable frame in Tkinter using a canvas and scrollbar?

Menggunakan Tkinter untuk Menambah Fungsi Bar Tatal pada Bingkai

Dalam Tkinter, mencipta bingkai boleh tatal memerlukan memasukkan bar tatal, yang membolehkan tatal automatik bagi kandungan yang melebihi ketinggian bingkai. Berdasarkan perbincangan yang bernas, adalah dicadangkan bahawa membina bingkai, melampirkan kanvas di dalamnya dan melampirkan bar skrol pada bingkai akan mencapai kefungsian yang diingini. Objek tetingkap kemudiannya disusun dalam kanvas untuk memuatkan bingkai tambahan.

Menggunakan kod Python berikut, bingkai boleh tatal secara menegak boleh dilaksanakan dengan berkesan:

import tkinter as tk
import tkinter.ttk as ttk

class VerticalScrolledFrame(ttk.Frame):
    def __init__(self, parent, *args, **kw):
        ttk.Frame.__init__(self, parent, *args, **kw)
        vscrollbar = ttk.Scrollbar(self, orient=VERTICAL)
        vscrollbar.pack(fill=Y, side=RIGHT, expand=FALSE)
        canvas = tk.Canvas(self, bd=0, highlightthickness=0, yscrollcommand=vscrollbar.set)
        canvas.pack(side=LEFT, fill=BOTH, expand=TRUE)
        vscrollbar.config(command=canvas.yview)
        canvas.xview_moveto(0)
        canvas.yview_moveto(0)
        self.interior = interior = ttk.Frame(canvas)
        interior_id = canvas.create_window(0, 0, window=interior, anchor=NW)
        def _configure_interior(event):
            size = (interior.winfo_reqwidth(), interior.winfo_reqheight())
            canvas.config(scrollregion="0 0 %s %s" % size)
            if interior.winfo_reqwidth() != canvas.winfo_width():
                canvas.config(width=interior.winfo_reqwidth())
        interior.bind('<Configure>', _configure_interior)
        def _configure_canvas(event):
            if interior.winfo_reqwidth() != canvas.winfo_width():
                canvas.itemconfigure(interior_id, width=canvas.winfo_width())
        canvas.bind('<Configure>', _configure_canvas)

root = tk.Tk()
frame = VerticalScrolledFrame(root)
frame.pack()
for i in range(10):
    ttk.Button(frame.interior, text="Button " + str(i)).pack()
root.mainloop()

Mengatasi Pertanyaan :

  1. Adalah mungkin untuk mencapai fungsi ini dengan lebih cekap dengan menggunakan kod yang disediakan.
  2. Kaedah grid lebih disukai kerana ia membenarkan kawalan yang lebih besar ke atas reka letak widget dalam bingkai.
  3. Argumen anchor='nw' menentukan bahawa tetingkap hendaklah dilabuhkan pada sudut barat laut kanvas, memastikan kandungan kekal kelihatan semasa bingkai ditatal secara menegak.

Atas ialah kandungan terperinci Bagaimanakah saya boleh mencipta bingkai boleh tatal dalam Tkinter menggunakan kanvas dan bar skrol?. 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