为什么在不同的行上打包相同的Frame会输出不同的东西?

时间:2019-06-25 10:08:50

标签: python-3.x tkinter

我试图并排打印出3个按钮作为图块,所以当我将此代码与包一起编写并创建框架时 我得到以下输出:

enter image description here] 1

当我打包帧之后,我得到这个输出

enter image description here

我不明白,请解释

代码1

class mainpage:
  def __init__(self,master):
    mainpage=Frame(master,width=100, height=100).pack(pady=50)
    self.im=Image.open("g.png")
    self.ph=ImageTk.PhotoImage(self.im)
    b1=Button(mainpage,image=self.ph).pack(side=LEFT,padx=50)
    b2=Button(mainpage,image=self.ph).pack(side=LEFT,padx=50)
    b3=Button(mainpage,image=self.ph).pack(side=LEFT,padx=50)
 root = Tk()
 m=mainpage(root)
 root.mainloop()

代码2

class mainpage:


def __init__(self,master):
    mainpage=Frame(master,width=100, height=100).pack(pady=50)
    self.im=Image.open("g.png")
    self.ph=ImageTk.PhotoImage(self.im)
    b1=Button(mainpage,image=self.ph).pack(side=LEFT,padx=50)
    b2=Button(mainpage,image=self.ph).pack(side=LEFT,padx=50)
    b3=Button(mainpage,image=self.ph).pack(side=LEFT,padx=50)
    mainpage.pack(pady=50)
root = Tk()
m=mainpage(root)
root.mainloop() 

1 个答案:

答案 0 :(得分:0)

区别在于,您调用pack的顺序很重要。 pack将事物放置在剩余空间中。一旦沿窗户的一侧包装了东西,它就会删除一些剩余空间。

代码中的问题是您将所有内容都放在了根窗口中。那是因为这行代码:

mainpage=Frame(master,width=100, height=100).pack(pady=50)

正在将mainpage设置为None。因此,当您执行Button(mainpage, ...)时,与将按钮放在根窗口中的Button(None, ...)相同。

我假设您的意图是将按钮放在mainpage内,您必须将mainpage的创建与mainpage的布局分开:

mainpage=Frame(master,width=100, height=100)
mainpage.pack(pady=50)