Python 小部件不可见或未填充所有预期空间

Python 小部件不可见或未填充所有预期空间,python,tkinter,Python,Tkinter,我希望显示两个帧和一个画布,以便: 红色框架必须位于窗口顶部,跨越画布和蓝色框架 蓝色的框架和画布在窗口的底部。画布在右边 我没有得到预期的结果。这是我的密码: from Tkinter import * class Mine(Frame): def __init__(self,master): Frame.__init__(self,master) self.frameh() self.framev() self.thecanv

我希望显示两个帧和一个画布,以便:

  • 红色框架必须位于窗口顶部,跨越画布和蓝色框架
  • 蓝色的框架和画布在窗口的底部。画布在右边
我没有得到预期的结果。这是我的密码:

from Tkinter import *
class Mine(Frame):
   def __init__(self,master):
       Frame.__init__(self,master)
       self.frameh()
       self.framev()
       self.thecanvas()
   # horizontal frame on top spanning over 2 columns
   def frameh(self):
       self.fh=Frame(root,width=400,height=40,bg="red")
       self.fh.grid(sticky=N,row=0,columnspan=2)
   # vertical frame on bottom
   def framev(self):
       self.fv=Frame(root,height=200,bg="blue")
       self.fv.grid(sticky=S+W,row=1,column=0)
   def thecanvas(self):
       self.c=Canvas(root,width=500,height=200,bg="black")
       self.c.grid(sticky=S+E,row=1,column=1)

if __name__=="__main__":
   root=Tk()       
   root.wm_title("mine")
   m=Mine(root)
   root.mainloop()

我想您应该为
frameh
设置
columnspan=2
,这样它就跨越了
framev
canvas
列(加上额外的
sticky
使其填满整个宽度),并为
framev
定义一个非零的最小宽度:

...
def frameh(self):
    self.fh=Frame(root, width=400, height=40, bg="red")
    self.fh.grid(sticky=N+E+W, row=0, columnspan=2)

def framev(self):
    self.fv=Frame(root, height=200, width=100, bg="blue")
    self.fv.grid(sticky=S+W, row=1, column=0)
...
这给了我:


预期的结果是什么,你得到了什么?如果没有合适的图像,我们无法运行此操作-这是复制问题所必需的吗?预期结果是使用黑色小球突出显示的结果。该图像只是一个图标,我将从我的question@Nakkini我已经编辑了你的标题(更准确地说)和标签(删除了那些没有你想要的含义的标签)(参考我的其他评论)@Ericleveil非常感谢谢谢你,我做了你让我做的事,但是我只看到了红色边框和画布。您是否为
framev
设置了非零宽度?我已经添加了我看到的。对不起,你是对的,我忘记了底部框架的宽度。它很好用。非常感谢你。你还应该编辑你的问题标题,使其内容更加丰富,并删除除python和tkinter之外的标记(标记不是关键字,每个标记都有一个精确的含义,你可以通过将鼠标悬停在上面看到)@Ericleveil作为对问题的评论比作为答案更好。或者,建议自己编辑!