我是python的新手,请原谅我的Noob- ness。我试图在应用程序窗口的底部创建一个状态栏,但是似乎每次我在同一文件中同时使用pack()和grid()方法时,主应用程序窗口都不会打开。当我注释掉显示statusbar.pack(side = BOTTOM,fill = X)的行时,我的应用程序窗口可以很好地打开,但是如果我将其保留在里面,也可以注释掉任何使用grid方法的行该窗口随状态栏打开。看来我只能使用pack()或grid(),但不能同时使用。我知道我应该能够同时使用这两种方法。有什么建议?这是代码:
from Tkinter import * import tkMessageBox def Quit(): answer = tkMessageBox.askokcancel('Quit', 'Are you sure?') if answer: app.destroy() app = Tk() app.geometry('700x500+400+200') app.title('Title') label_1 = Label(text = "Enter number") label_1.grid(row = 0, column = 0) text_box1 = DoubleVar() input1 = Entry(app, textvariable = text_box1) input1.grid(row = 0, column = 2) statusbar = Label(app, text = "", bd = 1, relief = SUNKEN, anchor = W) statusbar.pack(side = BOTTOM, fill = X) startButton = Button(app, text = "Start", command = StoreValues).grid(row = 9, column = 2, padx = 15, pady = 15) app.mainloop()
任何帮助表示赞赏!谢谢!
具有相同母版的窗口小部件不能同时使用pack和grid。第一个将调整小部件的大小。另一个将看到更改,并调整所有大小以适应其自身的约束。第一个将看到这些更改,并再次调整所有内容的大小以适应 其 约束。另一个将看到更改,依此类推。他们将陷于永恒的至高无上的斗争中。
pack
grid
从技术上来说,如果您确实 真的 知道自己在做什么,则出于所有意图和目的,您不能将它们混合 在同一容器中 。您可以在应用程序中将它们全部混合在一起,但是对于给定的容器(通常是框架),只能使用一个容器来管理容器的直接内容。
一种非常常见的技术是将您的GUI分成多个部分。在您的情况下,您有一个底部状态栏和一个顶部“主要”区域。因此,将状态栏沿底部打包,并在其上方为GUI的主要部分创建一个框架。然后,其他所有内容都将主框架作为其父框架,在该框架内,您可以使用grid或pack或任何您想要的东西。