在tkinter中,我试图制作一个包含小部件的可滚动画布,以便固定大小的窗口可以滚动以使用所有小部件。但是,当尝试通过从“画布”获取边界框大小来设置滚动条大小时,将返回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
。
答案 0 :(得分:0)
bbox
方法将仅返回画布项目的边界框。如果使用grid
向画布添加标签,则它不是画布项目。您必须使用一种方法(create_line
,create_window
等)将对象添加到画布。
(请注意,bbox
将返回它,直到显示在画布上的任何内容都将显示(0,0,0,0)为止。您需要在调用update之后重置滚动区域,或等待类似<Configure>
事件的事件。)