小编典典

python pack()和grid()方法在一起

python

我是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()

任何帮助表示赞赏!谢谢!


阅读 247

收藏
2020-12-20

共1个答案

小编典典

具有相同母版的窗口小部件不能同时使用packgrid。第一个将调整小部件的大小。另一个将看到更改,并调整所有大小以适应其自身的约束。第一个将看到这些更改,并再次调整所有内容的大小以适应
约束。另一个将看到更改,依此类推。他们将陷于永恒的至高无上的斗争中。

从技术上来说,如果您确实 真的 知道自己在做什么,则出于所有意图和目的,您不能将它们混合 在同一容器中
。您可以在应用程序中将它们全部混合在一起,但是对于给定的容器(通常是框架),只能使用一个容器来管理容器的直接内容。

一种非常常见的技术是将您的GUI分成多个部分。在您的情况下,您有一个底部状态栏和一个顶部“主要”区域。因此,将状态栏沿底部打包,并在其上方为GUI的主要部分创建一个框架。然后,其他所有内容都将主框架作为其父框架,在该框架内,您可以使用grid或pack或任何您想要的东西。

2020-12-20