Tkinter (python): Как изменить размер виджета (Как сделать размер виджета меньше размера его содержимого?)

Модератор: Модераторы разделов

Ответить
Аватара пользователя
ddc
Бывший модератор
Сообщения: 3535
Статус: OpenBSD-compatible
ОС: OpenBSD -current

Tkinter (python): Как изменить размер виджета

Сообщение ddc »

Вот есть такой код:

Код: Выделить всё

self.scroll = Scrollbar(self.editorWindow)
self.scroll.grid(sticky = E+W+S+N, row = 4, column = 3)
self.editCanvas = Canvas(self.editorWindow, bd = 0, yscrollcommand = self.scroll.set, height = 300)
self.editCanvas.grid(sticky = E+W+S+N, row = 4, column = 0, columnspan = 3)
self.editFrame = Frame(self.editCanvas)
self.editFrame.pack(fill = BOTH)
Идея в том, что в Canvas создаётся Frame, который по размерам не влезает на экран, и этот фрейм скролится внутри Canvas.

Всё создаётся, после чего editFrame наполняется виджетами. Вместо того, чтобы оставаться высотой в 300 editCanvas увеличивается до размеров editFrame. Добавления "self.editCanvas.config(scrollregion=self.editCanvas.bbox(ALL), height = 300)" ничего не меняется.

Что нужно сделать, чтобы editCanvas уменьшился до 300?

Python 2.6
Спасибо сказали:
Аватара пользователя
ddc
Бывший модератор
Сообщения: 3535
Статус: OpenBSD-compatible
ОС: OpenBSD -current

Re: Tkinter (python): Как изменить размер виджета

Сообщение ddc »

Убрал вообще Frame, всё вешается на Canvas:

Код: Выделить всё

from Tkinter import *

editorWindow = Tk()

scroll = Scrollbar(editorWindow)
scroll.grid(sticky = E+W+S+N, row = 4, column = 3)
editCanvas = Canvas(editorWindow, bd = 0, yscrollcommand = scroll.set,
height = 300)
editCanvas.grid(sticky = E+W+S+N, row = 4, column = 0, columnspan = 3)

i = 0
for i in range(100):
       Button(editCanvas, <...>).grid(row = i, column = 0)
       Entry(editCanvas, <...>).grid(row = i, column = 1)
       Entry(editCanvas, <...>).grid(row = i, column = 2)
       Entry(editCanvas, <...>).grid(row = i, column = 3)

scroll.config(command = editCanvas.yview)
editCanvas.config(scrollregion=editCanvas.bbox(ALL))
editCanvas.config(height = 30)

editorWindow.mainloop()
Спасибо сказали:
Ответить