小部件不可见或未填充所有预期的sp

2024-06-07 15:11:33 发布

您现在位置:Python中文网/ 问答频道 /正文

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

  • 红框必须在窗口的顶部,横跨画布和蓝框
  • 蓝色的框架和画布在窗户的底部。画布在右边

我没有得到预期的结果。这是我的密码:

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()

Tags: selfmasterinitdef画布rootframegrid
1条回答
网友
1楼 · 发布于 2024-06-07 15:11:33

我想您应该为frameh设置columnspan=2,以便它同时跨越framev列和thecanvas列(加上额外的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)
...

这给了我:

Mondrian-esque Tkinter window

相关问题 更多 >

    热门问题