无法用tkin理解pack和grid几何体

2024-09-18 18:52:58 发布

您现在位置:Python中文网/ 问答频道 /正文

嗨,我真的不明白furas是如何让下面的代码工作的。当他添加一个框时,为什么没有得到关于grid和pack在同一根上的错误消息?在addbox函数中,他将一个框架设置为根,根已经是pack,甚至在函数中使用pack,然后使用网格。你知道吗

有人能给我解释一下这个“魔法”是怎么起作用的吗?你知道吗

链接到他的答案: Creating new entry boxes with button Tkinter

    from Tkinter import *

#------------------------------------

def addBox():
    print "ADD"

    frame = Frame(root)
    frame.pack()

    Label(frame, text='From').grid(row=0, column=0)

    ent1 = Entry(frame)
    ent1.grid(row=1, column=0)

    Label(frame, text='To').grid(row=0, column=1)

    ent2 = Entry(frame)
    ent2.grid(row=1, column=1)

    all_entries.append( (ent1, ent2) )

#------------------------------------

def showEntries():

    for number, (ent1, ent2) in enumerate(all_entries):
        print number, ent1.get(), ent2.get()

#------------------------------------

all_entries = []

root = Tk()

showButton = Button(root, text='Show all text', command=showEntries)
showButton.pack()

谢谢


Tags: 函数texttkinterdefcolumnrootallframe
3条回答

不是一个真正的答案,但我想你会得到帮助的链接。 它的布局确实有点难以理解。 我一直不知道如何处理它,直到我无意中发现了这个演示文稿,它以一种我最终能掌握窍门的方式解释了布局细节。你知道吗

只是把它放出来让别人也能找到。 tkinter tutorial by beazley

没有魔法,它只是按设计工作。代码在根窗口中使用pack,在帧中使用grid。作为其他小部件容器的每个小部件可以使用gridpack。对于具有相同主控形状的小部件,不能同时使用gridpack。你知道吗

我想你错过了什么包和网格实际上是。考虑以下代码:

import tkinter as tk

root = tk.Tk()

myFrame = tk.Frame(root)

myFrame.pack()

myButton1 = tk.Button(myFrame, text='This is button 1')
myButton2 = tk.Button(myFrame, text='This is button 2')

myButton1.grid(row=0, column=0)
myButton2.grid(row=1, column=0)

root.mainloop()

通过创建root,我们创建了一个新窗口。我们将把其他的东西都放在这个窗口里。然后我们创建myFrame。注意,实际的“thing”(用更恰当的术语-widget)是在第myFrame = tk.Frame(root)行中创建的。请注意,我们必须指定将这个小部件放在括号中的位置,并且我们已经编写了它将是root-我们的主窗口。空白框架可能不是最好的例子,因为你看不到它被放置(除非你至少使用了更多的规范),但仍然。我们已经创建了它,但没有将它放在我们的用户界面中。我们使用.pack()来放置它。现在您将小部件称为用作包或网格。但事实并非如此。Pack和grid只是一组规则,在这些规则上,小部件被放置在某种窗口中。因此,如果您想在本例中的root中添加更多内容,则必须再次使用.pack()。为什么?如果你给你的电脑屏幕上如何放置东西的两套规则,它们很可能会互相冲突。但是,如果我们再往下一层,现在想在myFrame中放置一些东西,我们可以再次选择要使用的规则集。这是因为它不重要,我们的frame将在root内结束,我们现在只想指定按钮1和2将在帧内结束的位置。因此,我们可以再次使用.pack()或切换到.grid()。你知道吗

总之:.pack().grid().place()是关于如何将小部件放置在其他小部件中的一组规则。在更一般的情况下,这些规则是关于如何把盒子放在其他盒子里。一个盒子里我们安排其他盒子只能有一套规则。你知道吗

我希望这个例子有帮助。你知道吗

相关问题 更多 >