简而言之,我的问题是,在我正在编写的GUI中,滚动条重叠在框架的右边缘上方,而不是按预期的方式与框架相邻。我在这里做错了什么?一段代码重现了这个问题:
root=Tk()
root.title('Window Test')
root.grid_rowconfigure(0,weight=1)
overall=Frame(root)
overall.grid(row=0,column=0,sticky=N+E+S+W)
overall.grid_rowconfigure(0,weight=1)
outercanvas=Canvas(overall)
outercanvas.grid(row=0,column=0)
outerSframe=LabelFrame(outercanvas,text='Outer')
outerSB=Scrollbar(overall,command=outercanvas.yview)
outercanvas.config(yscrollcommand=outerSB.set)
outerSframe.bind('<Configure>',lambda e: outercanvas.configure(scrollregion=outercanvas.bbox('all')))
outercanvas.create_window((0,0),window=outerSframe,anchor=NW)
outerSB.grid(row=0,column=1,sticky=N+E+S)
innercanvas=Canvas(outerSframe)
innercanvas.grid(row=0,column=0)
innerSframe=LabelFrame(innercanvas,text='Inner')
innercanvas.create_window((0,0),window=innerSframe,anchor=NW)
Label(innerSframe,text='123456789012345678901234567890').pack()
这是因为您的代码未指定的宽度outercanvas
。您应该根据outerSframe
绑定到<Configure>
事件的内部回调的宽度设置其宽度:
def on_frame_resize(event):
bbox = outercanvas.bbox('all')
outercanvas.config(scrollregion=bbox, width=bbox[2]) # update width as well
root=Tk()
root.title('Window Test')
root.grid_rowconfigure(0,weight=1)
overall=Frame(root)
overall.grid(row=0,column=0,sticky=N+E+S+W)
overall.grid_rowconfigure(0,weight=1)
outercanvas=Canvas(overall)
outercanvas.grid(row=0,column=0)
outerSframe=LabelFrame(outercanvas,text='Outer')
outerSB=Scrollbar(overall,command=outercanvas.yview)
outercanvas.config(yscrollcommand=outerSB.set)
outerSframe.bind('<Configure>', on_frame_resize) # changed to a function instead of lambda
outercanvas.create_window((0,0),window=outerSframe,anchor=NW)
outerSB.grid(row=0,column=1,sticky=N+E+S)
innercanvas=Canvas(outerSframe)
innercanvas.grid(row=0,column=0)
innerSframe=LabelFrame(innercanvas,text='Inner')
innercanvas.create_window((0,0),window=innerSframe,anchor=NW)
Label(innerSframe,text='123456789012345678901234567890').pack()
root.mainloop()
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句