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

Differentiation between two using pack() in python

我有两个代码如下 第一个:

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

结果:

第二个密码:

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

结果:

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

此代码与您的想法不符:

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

它所做的是将 keyFr 设置为 None。为什么?在python、x().y()、returns中的值为y()。因此,Frame(self).pack(side="top")returns的价值pack(side="top")pack(...) 总是 returns None 所以 keyFrNone.

因为 keyFr 是 none,第一个代码块中的所有按钮都被添加到根部 window 而不是框架。