簡體   English   中英

Tkinter 畫布和帶網格的滾動條

[英]Tkinter canvas & scrollbar with grid

我在框架中有一個畫布

photoFrame = Frame(centerFrame, width=250, height=190, bg="#EBEBEB")
photoFrame.grid(row=0, column=1, sticky="nsew")
photoCanvas = Canvas(photoFrame, bg="#EBEBEB")
photoCanvas.grid(row=0, column=0, sticky="nsew")

我試着用這個把滾動條放到我的畫布上

photoScroll = Scrollbar(photoFrame, orient=VERTICAL)
photoScroll.config(command=photoCanvas.yview)
photoCanvas.config(yscrollcommand=photoScroll.set)
photoScroll.grid(row=0, column=1, sticky="ns")

滾動條出現但被禁用。 你能幫我嗎 ?

對不起,我的英語不好。

在 for 循環中,我使用此代碼添加了大量圖像按鈕

element = Button(photoCanvas, image = listPhotos[i], borderwidth=0, height = 200, width = 200, bg="#EBEBEB")
element.grid(row=rowPhoto, column=columnPhoto, padx=5, pady=5, sticky="nsew")

最后我有這個

    root = Tk()    
    photoFrame = Frame(root, width=250, height=190, bg="#EBEBEB")
        

    photoCanvas = Canvas(photoFrame, bg="#EBEBEB")
    photoCanvas.grid(row=0, column=0, sticky="nsew")
    
    for i in range(0, len(listPhotos), 1):
       element = Button(photoCanvas, image = listPhotos[i], borderwidth=0, height = 200, width = 200, bg="#EBEBEB")
       element.grid(row=rowPhoto, column=columnPhoto, padx=5, pady=5, sticky="nsew")
    
    photoScroll=Scrollbar(photoFrame,orient=VERTICAL)
    photoScroll.config(command=photoCanvas.yview)
    photoCanvas.config(yscrollcommand=photoScroll.set)
    photoScroll.grid(row=0, column=1, sticky="ns")

在我的應用程序中,紫色矩形是下一幀,我需要一個垂直滾動條在此處輸入圖片說明

如果您有任何問題,請說

滾動一組小部件的一種方法是將它們(帶有pack grid )放在一個框架內,並將這個框架放在畫布中。

滾動工作的兩個關鍵元素(除了將滾動條連接到畫布)是:

  • 使用canvas.create_window(x, y, window=frame)將框架放在畫布內,以便將其視為畫布項目。
  • 每次使用canvas.configure(scrollregion=canvas.bbox('all'))更改框架大小時(例如在添加新小部件之后)更新canvas.configure(scrollregion=canvas.bbox('all'))

這是問題Python Tkinter scrollbar for frame的代碼的改編,但使用來自 OP 問題和grid的小部件名稱而不是pack

import tkinter as tk

def update_scrollregion(event):
    photoCanvas.configure(scrollregion=photoCanvas.bbox("all"))

root = tk.Tk()   


photoFrame = tk.Frame(root, width=250, height=190, bg="#EBEBEB")
photoFrame.grid()
photoFrame.rowconfigure(0, weight=1) 
photoFrame.columnconfigure(0, weight=1) 

photoCanvas = tk.Canvas(photoFrame, bg="#EBEBEB")
photoCanvas.grid(row=0, column=0, sticky="nsew")

canvasFrame = tk.Frame(photoCanvas, bg="#EBEBEB")
photoCanvas.create_window(0, 0, window=canvasFrame, anchor='nw')

for i in range(10):
   element = tk.Button(canvasFrame, text='Button %i' % i, borderwidth=0, bg="#EBEBEB")
   element.grid(padx=5, pady=5, sticky="nsew")

photoScroll = tk.Scrollbar(photoFrame, orient=tk.VERTICAL)
photoScroll.config(command=photoCanvas.yview)
photoCanvas.config(yscrollcommand=photoScroll.set)
photoScroll.grid(row=0, column=1, sticky="ns")

canvasFrame.bind("<Configure>", update_scrollregion)

root.mainloop()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM