Rumah > pembangunan bahagian belakang > Tutorial Python > 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
Lepaskan: 2024-11-26 08:57:12
asal
1006 orang telah melayarinya

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

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!

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