Метод Canvas bbox возвращает None, хотя виджеты существуют внутри - PullRequest
0 голосов
/ 16 января 2019

В tkinter я пытаюсь создать прокручиваемый холст, содержащий виджеты, чтобы мое окно фиксированного размера могло прокручивать, чтобы использовать все виджеты. Однако при попытке установить размер полосы прокрутки путем получения размера ограничивающего прямоугольника из Canvas возвращается None.

Мои виджеты добавляются на холст путем назначения их родителя в качестве холста и вызова grid() для каждого. Я пытаюсь получить размер ограничивающего прямоугольника после создания и размещения виджетов.

# Create vertical scrollbar
self.scrollbar = Scrollbar(self.master, orient = VERTICAL)
# Pack on the right side and fill on the Y-axis
self.scrollbar.pack(side = RIGHT, fill = Y)
# Create container canvas, set Y-axis scroll command to scrollbar value
self.mainsection = Canvas(self.master, bg = colors["lightgray"], yscrollcommand = self.scrollbar.set)
# Pack on the left side, center, fill and expand on both axes
self.mainsection.pack(side = LEFT, anchor = CENTER, fill = BOTH, expand = True)
# Configure the scrollbar to scroll the canvas.
self.scrollbar.config(command = self.mainsection.yview)

# Widget definitions go here.
self.printsectionlabel = Label(self.mainsection, text = "Print Bills")
self.printsectionlabel.grid(row = 0)
# More widget definitions here...

# Run after all widget definitions
# Creates disabled scrollbar
self.mainsection.configure(scrollregion = self.mainsection.bbox(ALL))
# Prints "None"
print(self.mainsection.bbox(ALL))

print(self.mainsection.bbox(ALL)) должен распечатать некоторую информацию о ограничительной рамке холста; однако, он возвращает None.

1 Ответ

0 голосов
/ 16 января 2019

Метод bbox возвращает ограничивающий прямоугольник только для элементов холста. Если вы добавите метку на холст с grid, это не элементы холста. Для добавления объекта на холст необходимо использовать один из методов (create_line, create_window и т. Д.).

(Обратите внимание, что bbox будет возвращать, покажет (0, 0, 0, 0), пока все, что добавлено на холст, фактически не будет видно на экране. Вам нужно сбросить область прокрутки либо после вызова update, либо в ожидании для чего-то вроде <Configure> события.)

...