首頁 > 後端開發 > Python教學 > 如何使用畫布和捲軸在 Tkinter 中建立可捲動框架?

如何使用畫布和捲軸在 Tkinter 中建立可捲動框架?

Mary-Kate Olsen
發布: 2024-11-26 08:57:12
原創
1023 人瀏覽過

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

利用Tkinter 為框架添加捲軸功能

在Tkinter 中,創建可滾動框架需要合併滾動條,從而可以自動滾動超出滾動條框架高度的內容。基於富有洞察力的討論,有人建議建立一個框架,在其中包含一個畫布,並將滾動條附加到框架上將實現所需的功能。然後在畫布內構思一個視窗物件來容納額外的框架。

使用以下Python 程式碼,可以有效地實現垂直可捲動的框架:

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()
登入後複製

解決查詢:

  1. 可以透過利用更有效的方式實現此功能提供的程式碼。
  2. 網格方法是首選,因為它可以更好地控制框架內小部件的佈局。
  3. anchor='nw' 參數指定視窗應錨定到畫布的西北角,確保當框架垂直捲動時內容仍可見。

以上是如何使用畫布和捲軸在 Tkinter 中建立可捲動框架?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板