两个在python中使用pack()的区别

时间:2017-08-24 17:33:16

标签: python tkinter pack

我有两个代码 第一个:

from tkinter import *
root = Tk()
class App(Frame):
    def __init__(self, master):
        Frame.__init__(self,master)
        self.pack()
        for keyF in ('123','456','789','-0.'):
            keyFr = Frame(self).pack(side="top")
            for char in keyF:
                but = Button(keyFr, text=char).pack(side='left')    
App(root)
root.mainloop()

结果:

enter image description here

第二个代码:

from tkinter import *
root = Tk()
class App(Frame):
    def __init__(self, master):
        Frame.__init__(self,master)
        self.pack()
        for keyF in ('123','456','789','-0.'):
            keyFr = Frame(self)
            keyFr.pack(side="top")
            for char in keyF:
                but = Button(keyFr, text=char)
                but.pack(side='left')
App(root)
root.mainloop()

结果:

enter image description here

我不知道在这些代码中使用pack有什么不同。你能帮我解释一下吗?

1 个答案:

答案 0 :(得分:0)

此代码不符合您的想法:

keyFr = Frame(self).pack(side="top")

它的作用是将keyFr设置为None。为什么?在python中,x().y()返回y()的值。因此,Frame(self).pack(side="top")会返回pack(side="top")的值。 pack(...)始终返回None,因此keyFrNone

因为keyFr为none,所以第一个代码块中的所有按钮都会被添加到根窗口而不是帧中。