Python 画布未填充可用空间tkinter

Python 画布未填充可用空间tkinter,python,python-3.x,tkinter,tkinter-canvas,Python,Python 3.x,Tkinter,Tkinter Canvas,我正在尝试使用tkinter作为gui界面制作一个消息传递程序。在gui的左侧,有一个画布,其中有数字1-100。画布侧面还有一个滚动条,可以滚动浏览这些数字 问题是画布无法填满所有可用空间,并且出于某种原因,画布将自身限制为一个小盒子 代码: 从tkinter导入* #***可滚动框架类*** 类垂直滚动框架(框架): 定义初始值(自、父、*args、**kw): 帧。\uuuuu初始化(自,父,*args,**kw) vscrollbar=滚动条(自,方向=垂直) vscrollbar.pa

我正在尝试使用tkinter作为gui界面制作一个消息传递程序。在gui的左侧,有一个画布,其中有数字1-100。画布侧面还有一个滚动条,可以滚动浏览这些数字

问题是画布无法填满所有可用空间,并且出于某种原因,画布将自身限制为一个小盒子

代码:

从tkinter导入*
#***可滚动框架类***
类垂直滚动框架(框架):
定义初始值(自、父、*args、**kw):
帧。\uuuuu初始化(自,父,*args,**kw)
vscrollbar=滚动条(自,方向=垂直)
vscrollbar.pack(填充=Y,侧边=LEFT,展开=FALSE)
canvas=canvas(self,bd=0,highlightthickness=0,yscrollcommand=vscrollbar.set,bg=“black”)
canvas.pack(side=LEFT,fill=BOTH,expand=TRUE)
vscrollbar.config(命令=canvas.yview)
canvas.xview_moveto(0)
canvas.yview_moveto(0)
self.interior=内部=框架(画布)
内部=画布。创建窗口(0,0,窗口=内部,
锚点=西北)
鼠标滚轮上的def(事件):
canvas.yview_卷轴(int(-1*(event.delta/120)),“单位”)
self.interior.bind_all(“,_在鼠标滚轮上)
canvas.bind_all(“,_在鼠标滚轮上)
def_配置_内部(事件):
大小=(interior.winfo_reqwidth(),interior.winfo_reqheight())
canvas.config(scrollregion=“0%s%s”%size)
if interior.winfo_reqwidth()!=canvas.winfo_width():
canvas.config(width=interior.winfo_reqwidth())
内部绑定(“”,\u配置\u内部)
定义配置画布(事件):
if interior.winfo_reqwidth()!=canvas.winfo_width():
canvas.itemconfigure(interior\u id,width=canvas.winfo\u width())
canvas.bind(“”,\u configure\u canvas)
#***创建窗口***
root=Tk()
根几何(“800x545”)
root.config(bg=“#23272A”)
#根目录。可调整大小(False,False)
root.title(“安全消息”)
#***设置好友框***
friends\u frame=垂直滚动框架(根)
friends\u frame.pack(侧面=左侧)
对于范围(100)内的i:
friend_frames=[]
friend\u frame=框架(friends\u frame.interior,宽度=100)
friend\u frames.append(friend\u frames)
friend_帧[-1].pack()
text=标签(友元框架,text=i)
text.pack(侧面=左侧)
chatSpace\u frame=帧(根)
chatSpace\u frame.pack(侧=右)
#***图形用户界面***
chatSpace=Listbox(chatSpace_帧,bg=“#2C2F33”,fg=“白色”,宽度=65,高度=29)
网格(行=0,列=1,粘滞=E,padx=10)
用户输入=输入(聊天室输入框,highlightbackground=“#2C2F33”,bg=“灰色”,width=64,fg=“白色”)
用户输入网格(行=1,列=1,粘滞=E,pady=10,padx=9)
用户输入。焦点()
root.mainloop()
如果有点难以理解,我很抱歉。任何帮助都将不胜感激

截图


左边有数字的画布需要填充聊天空间旁边的所有空白灰色空间。

即使您没有发布运行的代码,但很明显问题不在于画布,而在于它所在的框架

这就是问题所在:

friends_frame.pack(side=LEFT)

您没有展开
friends\u框架
,因此其中的画布无法展开。您需要在框架上设置
expand
和/或
fill
选项。

问题是
friends\u框架
未设置为同时填充X&Y和expand需要设置为true

范例


您可能只需要将填充/展开选项添加到
friends\u frame.pack(side=LEFT)
行。发布的代码有缩进错误。话虽如此,我认为问题不在于画布,而在于画布所在的框架。阅读@jasonharper我已经尝试过了,不幸的是,它没有起作用。@BryanOakley我相信缩进错误是因为我如何将代码粘贴到堆栈溢出中,实际的程序没有缩进错误。
friends\u frame
不是OP认为的那样。@stovfl:我不知道你的意思,我也不确定这是否重要。无论他们认为它是什么,它都不会填充分配给它的空间。
friends\u frame
画布
滚动条
的父级。因此它不是可滚动的
框架
@stovfl:我还是不明白你的意思。他们不是问画布内部的框架,而是问为什么画布没有增长。它没有生长是因为它的父代没有生长。
friends_frame.pack(side=LEFT)
# *** Set frame for friends view ***
friends_frame = VerticalScrolledFrame(root, bg="#23272A")
friends_frame.pack(side=LEFT, fill=BOTH, expand=TRUE)