Python Tkinter窗口/框架调整问题协调问题2.7

时间:2017-01-13 06:43:32

标签: python python-2.7 user-interface tkinter

我正在家里做一个项目,试图用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()

Picture of Window

我发布了这个功能。我不得不用代码做一些奇怪的事情来让它做这么多。但是图片不会扩展,只是在图片的下方和上方灰化。我不得不随意修改宽度和高度的顶部标签和顶部标签。 任何帮助将不胜感激。 这是用Python编写的,使用Tkinter!

1 个答案:

答案 0 :(得分:0)

很难给出明确的答案,因为GUI布局在很大程度上取决于具体细节。帧中有什么?调整大小时,您希望他们如何表现?如果窗口太小会怎么样?

如果我这样做,我可能会删除内部框架并将所有内容放在网格中,因为它似乎有两列和两行或三行。虽然,这个决定实际上取决于将在各种行和列中放置什么。

使用pack和额外的辅助框架(这通常是我的第一选择!)没有任何问题,grid可以说是工作的最佳工具,如果你想要宽度的话两列或更多列是相同的。

Grid允许您将列配置为统一组uniform属性具有相同值的每列将具有相同的大小。因此,例如,要确保topFrameLefttopFrameRight完全相同,您可以将它们放在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。您可以在应用程序中自由混合和匹配packplacegrid,只要您不要将它们与共享同一父级的小部件混合使用。