Я создал (с помощью) класс Frame с полосами прокрутки на нем.Кажется, работает хорошо, но я хотел бы, чтобы кнопки сами по размеру соответствовали размеру рамки.Прямо сейчас, если вы посмотрите, все они сгруппированы с левой стороны.Я просмотрел много примеров, и это кажется обычным делом.Ниже приведен простой код для запуска, чтобы вы могли увидеть проблему.Ниже приводится изображение проблемы.
Спасибо.
from tkinter import *
class ScrolledFrame(Frame):
def __init__(self, top, *args, **kwargs):
Frame.__init__(self, top, *args, **kwargs)
hscrollbar = Scrollbar(self, orient=HORIZONTAL)
hscrollbar.grid(row=1, column=0, sticky=E+W)
vscrollbar = Scrollbar(self, orient=VERTICAL)
vscrollbar.grid(row=0, column=1, sticky=N+S)
self.canvas = Canvas(self, xscrollcommand=hscrollbar.set, yscrollcommand=vscrollbar.set)
self.canvas.grid(row=0, column=0, sticky=N+S+E+W)
hscrollbar.config(command = self.canvas.xview)
vscrollbar.config(command = self.canvas.yview)
# Make the canvas expandable
self.grid_rowconfigure(0, weight=1)
self.grid_columnconfigure(0, weight=1)
# Create the canvas contents
self.frame = Frame(self.canvas)
self.frame.rowconfigure(1, weight=1)
self.frame.columnconfigure(1, weight=1)
self.canvas.create_window(0, 0, window=self.frame, anchor=N+W)
self.canvas.config(scrollregion=self.canvas.bbox('all'))
self.frame.bind('<Configure>', self.frame_changed)
def frame_changed(self, event):
self.frame.update_idletasks()
self.canvas.config(scrollregion=self.canvas.bbox('all'))
root = Tk()
frame = ScrolledFrame(root)
frame.grid(row=0, column=0, sticky=N+E+W+S)
root.rowconfigure(0, weight=1)
root.columnconfigure(0, weight=1)
for i in range(20):
button = Button(frame.frame, text='xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx %d' % i)
button.pack(fill=BOTH, side=TOP, expand=True)
root.mainloop()
![enter image description here](https://i.stack.imgur.com/TumDy.jpg)