当我运行下面的代码时,我没有收到错误,但底部框架没有显示在窗口中,请告诉我为什么以及如何使其显示(请使用包方法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)
答案 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
如何运作的规范说明:
答案 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()