繁体   English   中英

无法使用tkinter理解包和网格的几何形状

[英]Can't understand pack and grid geometry with tkinter

嗨,我不太了解furas如何使以下代码起作用。 当他添加一个盒子时,为什么他没有收到关于网格和打包的错误消息? 在addbox函数中,他将框架设置为已经打包的根,甚至使用函数内部的pack,然后使用网格。

有人可以向我解释一下这种“魔术”是如何工作的吗?

他的答案的链接: 用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()

谢谢

没有魔术,只是按设计工作。 该代码在根窗口中使用pack ,并在框架内使用grid 每个充当其他小部件容器的小部件都可以使用gridpack 对于具有相同母版的小部件,您不能同时使用gridpack在一起。

并非真正的答案,但我认为您会从该链接中获得帮助。 tkinter及其布局确实有点难以理解。 直到我迷失了本演示文稿,直到我终于可以理解它的方式解释了布局细节之后,我才知道如何处理它。

只要把它放在那里,其他人也可以找到。 bezley的tkinter教程

我认为您错过了实际的包装和网格。 考虑这样的代码:

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 注意,实际的“事物”(用更恰当的术语-小部件)是在myFrame = tk.Frame(root)行中创建的。 注意,我们必须指定要将此小部件放在方括号中的位置,并且我们已经写好它将成为根目录-我们的主窗口。 空白框可能不是最好的示例,因为您看不到它的放置位置(除非您至少使用了更多规格,否则不会),但仍然如此。 我们已经创建了它,但是没有将其放置在用户界面中。 我们使用.pack()放置它。 现在,您将小部件称为包或网格。 但这不是事实。 Pack和grid只是一组规则,在其上将小部件放置在某种类型的窗口中。 因此,如果要在本例中向root添加更多内容,则必须再次使用.pack() 为什么? 如果您针对如何在计算机屏幕上放置东西给出两套规则-它们很可能会相互冲突。 但是,如果我们再下一层,现在想在myFrame放置一些东西,我们可以再次选择要使用的规则集。 这是因为没有关系,我们的frame将在root内结束,我们现在只想指定按钮1和2在框架内的结束位置。 因此,我们可以再次使用.pack()或切换到.grid()

得出以下结论: .pack() .grid().place()是关于如何将小部件放置在其他小部件内的规则集。 概括地说,这些是关于如何将框放置在其他框中的规则。 我们在其中布置其他盒子的一个盒子只能有一组规则。

希望这个例子对您有所帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM