滚动按钮网格



这段代码不能使滚动条工作。它保持原来的位置。

from tkinter import *       
from tkinter.ttk import *

root = Tk()      
root.geometry('400x400')    
frame = Frame(root)
frame.pack()
scroll = Scrollbar(frame,orient=VERTICAL)
scroll.pack(side="right", fill = "y")
canvas = Canvas(frame)
canvas.pack(side="left", fill="both", expand=True)
#canvas.config(yscrollcommand=scroll.set) if I uncomment this, it still doesn't work
scroll.config(command=canvas.yview)
for fila in range(50):
for col in range(3):
btn = Button(canvas, text = f"{fila}-{col}")
btn.grid(row=fila, column=col)
root.mainloop()

您的代码被重新排列了一下。

我已经包含了一个canvas窗口对象来保存保存按钮的框架。

画布现在有一个scrollregion,这是必要的,当使用Scrollbars

我发现grid管理器比pack提供了更精确的控件定位控制

哦,我用的是LabelFrame而不是标准的Frame

import tkinter as tk

root = tk.Tk()      
# essential to enable full window resizing
root.rowconfigure(0, weight = 1)
root.columnconfigure(0, weight = 1)
# scrollregion is also essential when using scrollbars
canvas = tk.Canvas(
root, scrollregion = "0 0 2000 1000", width = 400, height = 400)
canvas.grid(row = 0, column = 0, sticky = tk.NSEW)
scroll = tk.Scrollbar(root, orient = tk.VERTICAL, command = canvas.yview)
scroll.grid(row = 0, column = 1, sticky = tk.NS)
canvas.config(yscrollcommand = scroll.set)
# I've used a labelframe instead of frame so button are neatly collected and named
frame = tk.LabelFrame(root, labelanchor = tk.N, text = "Buttonpad")
# Note I've placed buttons in frame
for fila in range(20):
for col in range(5):
btn = tk.Button(frame, text = f"{fila}-{col}")
btn.grid(row = fila, column = col, sticky = tk.NSEW)
# Frame is now inserted into canvas via create_window method
item = canvas.create_window(( 2, 2 ), anchor = tk.NW,  window = frame )
root.mainloop()

最新更新