为什么赢得我的框架包python3 tkinter

时间:2018-03-03 18:20:40

标签: python python-3.x tkinter

当我运行下面的代码时,我没有收到错误,但底部框架没有显示在窗口中,请告诉我为什么以及如何使其显示(请使用包方法NOT GRID) 。我使用的是Python 3.5.0

import tkinter 
from tkinter import *
root = tkinter.Tk()
root.geometry("1920x1080")
TopFrame = Frame(root, width=1920, height=200, bg= "green")
TopFrame.pack(side=TOP)
MiddleRightFrame = Frame(root, width=1120, height=730, bg="orange")
MiddleRightFrame.pack(side=RIGHT)
MiddleLeftFrame = Frame(root, width=800, height=730, bg="black")
MiddleLeftFrame.pack(side=LEFT)
BottomFrame = Frame(root, width=1920, height=150, bg="blue")
BottomFrame.pack(side=BOTTOM)

3 个答案:

答案 0 :(得分:1)

您的MiddleLeftFrame宽度为800像素。您的MiddleRightFrame是1120像素。 1120 + 800 = 1920.你强迫窗口只有1920像素宽,所以蓝框没有空间。

删除此行,系统会显示您的框架:root.geometry("1920x1080")

如果您希望它显示在窗口底部,横跨窗口的整个宽度,请在左侧和右侧调用pack之前调用pack

另外,我强烈建议您将pack语句分组在一起。它使我的经验中的代码更容易管理(我有很多很多的经验!)。

import tkinter 
from tkinter import *
root = tkinter.Tk()
root.geometry("1920x1080")

TopFrame = Frame(root, width=1920, height=200, bg= "green")
MiddleRightFrame = Frame(root, width=1120, height=730, bg="orange")
MiddleLeftFrame = Frame(root, width=800, height=730, bg="black")
BottomFrame = Frame(root, width=1920, height=150, bg="blue")

TopFrame.pack(side=TOP)
BottomFrame.pack(side=BOTTOM)
MiddleRightFrame.pack(side=RIGHT)
MiddleLeftFrame.pack(side=LEFT)

root.mainloop()

这可行的原因是由于打包算法。当您在左侧或右侧放置某些内容时,它将分配该侧的所有剩余垂直空间。因此,在你左右包装东西然后在底部包装东西后,"底部"是左右之间空间的底部,而不是整个窗口的底部。

以下是pack如何运作的规范说明:

http://tcl.tk/man/tcl8.5/TkCmd/pack.htm#M26

答案 1 :(得分:0)

添加:

tkinter.mainloop()

以便GUI开始等待事件而不是跳过关闭自身。

此外,pack使用填充算法,该算法动态计算以填充空白区域。您不应该这样做,但在这种特定情况下,简单的调用交换就足够了。拨打:

BottomFrame.pack(side=BOTTOM)

完全在 TopFrame的包装之后:

TopFrame.pack(side=TOP)
BottomFrame.pack(side=BOTTOM)
MiddleRightFrame.pack(side=RIGHT)
MiddleLeftFrame.pack(side=LEFT)

答案 2 :(得分:0)

我认为问题在于你正在使用包边,以便在中间有一条线。解决这个问题的一种方法是创建一个使用包边的MiddleFrame,然后只打包其他框架。

import tkinter 
from tkinter import *

root = tkinter.Tk()
root.geometry("1920x1080")

TopFrame = Frame(root, width=1920, height=200, bg= "green")
TopFrame.pack()

#the middle frame
MiddleFrame = Frame(root)

#pack the two middle frames into the frame created above
#the parent of the two middle frames change to become MiddleFrame instead of root
MiddleRightFrame = Frame(MiddleFrame, width=1120, height=730, bg="orange")
MiddleRightFrame.pack(side=RIGHT)

MiddleLeftFrame = Frame(MiddleFrame, width=800, height=730, bg="black")
MiddleLeftFrame.pack(side=RIGHT)

#pack the middle frame with both frames inside it
MiddleFrame.pack()

BottomFrame = Frame(root, width=1920, height=150, bg="blue")
BottomFrame.pack()