我对Python不熟悉,所以请原谅我的无知。我试图在我的应用程序窗口底部创建一个状态栏,但似乎每次我在同一个文件中同时使用pack()和grid()方法时,主应用程序窗口都不会打开。当我注释掉写有status bar.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()
感谢您的帮助!谢谢!
是的,没错。在下面的例子中,我将程序分为两个帧。frame1面向菜单/工具栏,使用pack()方法,其中frame2用于生成登录页凭据,并使用grid()方法。
不能在具有相同主控形状的小部件上同时使用
pack
和grid
。第一个将调整小部件的大小。另一个将看到更改,并调整所有内容以适应其自身的约束。第一个将看到这些更改,并重新调整所有内容以适应其约束。另一个将看到无限的变化,等等。他们将陷入一场永恒的霸权斗争。如果你真的,真的知道你在做什么在技术上是有可能的,但是出于所有的意图和目的,你不能把它们混合在同一个容器中。您可以将它们作为一个整体混合到应用程序中,但对于给定的容器(通常是一个框架),您只能使用其中一个来管理容器的直接内容。
一种非常常见的技术是将您的GUI分成多个部分。在你的例子中,你有一个底部的状态栏和一个顶部的“主”区域。因此,沿着底部打包statusbar,并为GUI的主要部分创建一个打包在它上面的框架。然后,其他所有的东西都有主框架作为其父框架,在这个框架内,你可以使用网格或包或任何你想要的东西。
相关问题 更多 >
编程相关推荐