嗨,我真的不明白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()
谢谢
不是一个真正的答案,但我想你会得到帮助的链接。 它的布局确实有点难以理解。 我一直不知道如何处理它,直到我无意中发现了这个演示文稿,它以一种我最终能掌握窍门的方式解释了布局细节。你知道吗
只是把它放出来让别人也能找到。 tkinter tutorial by beazley
没有魔法,它只是按设计工作。代码在根窗口中使用
pack
,在帧中使用grid
。作为其他小部件容器的每个小部件可以使用grid
或pack
。对于具有相同主控形状的小部件,不能同时使用grid
和pack
。你知道吗我想你错过了什么包和网格实际上是。考虑以下代码:
通过创建
root
,我们创建了一个新窗口。我们将把其他的东西都放在这个窗口里。然后我们创建myFrame
。注意,实际的“thing”(用更恰当的术语-widget)是在第myFrame = tk.Frame(root)
行中创建的。请注意,我们必须指定将这个小部件放在括号中的位置,并且我们已经编写了它将是root-我们的主窗口。空白框架可能不是最好的例子,因为你看不到它被放置(除非你至少使用了更多的规范),但仍然。我们已经创建了它,但没有将它放在我们的用户界面中。我们使用.pack()
来放置它。现在您将小部件称为用作包或网格。但事实并非如此。Pack和grid只是一组规则,在这些规则上,小部件被放置在某种窗口中。因此,如果您想在本例中的root
中添加更多内容,则必须再次使用.pack()
。为什么?如果你给你的电脑屏幕上如何放置东西的两套规则,它们很可能会互相冲突。但是,如果我们再往下一层,现在想在myFrame
中放置一些东西,我们可以再次选择要使用的规则集。这是因为它不重要,我们的frame
将在root
内结束,我们现在只想指定按钮1和2将在帧内结束的位置。因此,我们可以再次使用.pack()
或切换到.grid()
。你知道吗总之:
.pack()
、.grid()
和.place()
是关于如何将小部件放置在其他小部件中的一组规则。在更一般的情况下,这些规则是关于如何把盒子放在其他盒子里。一个盒子里我们安排其他盒子只能有一套规则。你知道吗我希望这个例子有帮助。你知道吗
相关问题 更多 >
编程相关推荐