无法生成Tkinter滚动条

时间:2018-11-28 02:52:31

标签: python user-interface tkinter scrollbar

self.root = tkinter.Tk()

self.frame = Frame(self.root, width = 1300, height = 1300, bg = "yellow")
self.frame.grid(row = 0 , column = 0, sticky = 'nw')
self.frame.grid_rowconfigure(0, weight=1)
self.frame.grid_columnconfigure(0, weight=1)
self.frame.grid_propagate(True)

self.canvas_main = Canvas(self.frame, 
                      height = 300, 
                      width = 300,
                      scrollregion=(500,500,0,500)
                      )

 self.canvas_main.grid(row = 0, column = 0, padx= 10, pady = 10, sticky = "news")

 self.scrollbar = Scrollbar(self.root, orient = VERTICAL, command = self.canvas_main.yview)
 self.scrollbar.grid(row = 0, column = 1, sticky = 'ns')
 self.canvas_main.configure(yscrollcommand=self.scrollbar.set)

在上面的代码块中,我输入了Scrollbar元素以启用垂直滚动条,但是它没有反映出来。谁能在这个区块中找出我做错了什么?

1 个答案:

答案 0 :(得分:0)

您已将可滚动区域(scrollregion)设置为零像素高,因此tkinter认为在垂直方向没有任何滚动内容。

通常,您将首先进行绘制,然后将可滚动区域设置为包含您绘制的所有内容。为此,您需要获取边界框(包含所有画布对象的最小矩形),然后将其用作scrollregion的值。

示例:

canvas = tk.Canvas(...)
<draw a bunch of objects>
canvas.configure(scrollregion=canvas.bbox("all"))

另一种方法是提前定义虚拟绘图区域的大小。例如,您已将画布的宽度和高度设置为300。如果您希望实际绘图区域是可见大小的两倍,则可以将scrollregion设置为两倍大。 >

此示例将可滚动区域设置为从0,0(左上角)开始,一直扩展到600,600(右下角):

canvas = tk.Canvas(..., width=300, height=300)
canvas.configure(scrollregion=(0,0,600,600)