我正在家里做一个项目,试图用3个(技术上4个)框架创建一个窗口。 我有一个上框架,里面有2个框架(我想要一个左右框架) 然后我有一个较低的框架,涵盖其他一切。 较低的框架最终将有一个外部过程,但现在一个图像不会占用整个空间。 上部空间不会均匀分开,即使我在一个点上均匀分割高度和宽度。 我将发送我的代码并在下面显示一个图像。
def createFrames(self):
#Main Upper Frame
topFrame = Frame(height=120, width=800, bd=1, relief=SUNKEN)
topFrame.pack(side=TOP)
#Left Frame in Main Upper Frame
topFrameLeft = Frame(topFrame, height=120, width=400)
topFrameLeft.pack(side=LEFT)
#Right Frame in Main Upper Frame
topFrameRight = Frame(topFrame, height=120, width=400)
topFrameRight.pack(side=RIGHT)
#Frame for GPS, Lower
centerFrame = Frame(width=800, height=400, bg="",
colormap="new",bd=3, relief=GROOVE)
centerFrame.pack(side=BOTTOM, fill=BOTH, expand=True)
#photo stuff
photo = PhotoImage(file="GPS_Imitation.gif")
#scale_w = 3
#scale_h = 400/200
#photo = photo.zoom(scale_w, scale_h)
#photo = photo.subsample(1)
Image_Label = Label(centerFrame, image=photo)
Image_Label.photo = photo
Image_Label.pack(fill=BOTH, expand=True)
#Label for Left Frame
Left_Label = Label(topFrameLeft, width=56, text="Audio", bg="gray",
fg="blue")
Left_Label.pack()
#Label for Right Frame
Right_Label = Label(topFrameRight, width=60,
text="Phone/Notification",
bg="Green", fg="Black")
Right_Label.pack()
我发布了这个功能。我不得不用代码做一些奇怪的事情来让它做这么多。但是图片不会扩展,只是在图片的下方和上方灰化。我不得不随意修改宽度和高度的顶部标签和顶部标签。 任何帮助将不胜感激。 这是用Python编写的,使用Tkinter!
答案 0 :(得分:0)
很难给出明确的答案,因为GUI布局在很大程度上取决于具体细节。帧中有什么?调整大小时,您希望他们如何表现?如果窗口太小会怎么样?
如果我这样做,我可能会删除内部框架并将所有内容放在网格中,因为它似乎有两列和两行或三行。虽然,这个决定实际上取决于将在各种行和列中放置什么。
使用pack
和额外的辅助框架(这通常是我的第一选择!)没有任何问题,grid
可以说是工作的最佳工具,如果你想要宽度的话两列或更多列是相同的。
Grid允许您将列配置为统一组。 uniform
属性具有相同值的每列将具有相同的大小。因此,例如,要确保topFrameLeft
和topFrameRight
完全相同,您可以将它们放在topFrame
内的统一群组中。
首先使用grid
将小部件放在TopFrame
:
topFrameLeft.grid(row=0, column=0, sticky="nsew")
topFrameRight.grid(row=0, column=1, sticky="nsew")
接下来,配置统一列。注意:即使您只使用一行或一列,最好始终为至少一行和一列赋予权重。
topFrame.grid_rowconfigure(0, weight=1)
topFrame.grid_columnconfigure(0, uniform="half", weight=1)
topFrame.grid_columnconfigure(1, uniform="half", weight=1)
注意:您可以继续对所有其他小部件使用pack
。您可以在应用程序中自由混合和匹配pack
,place
和grid
,只要您不要将它们与共享同一父级的小部件混合使用。