精神残废 2023-04-02 19:52 采纳率: 70.8%
浏览 28
已结题

tkinter多层Frame疑问

我想知道self.pack(expand=1, fill="both")中self是root还是frame,没有这一句就无法显示,

img

有就可以显示

img

我这一共是几层frame,self.frame = Frame(self)是在root上还是在一个frame上面


class LoginInterface(Frame):
    def __init__(self, parent,count_manager_dict):
        super().__init__(parent)
        self.count_manager_dict = count_manager_dict
        self.pack(expand=1, fill="both")
        self.frame = Frame(self)
        self.frame.pack(expand=1, fill="both", padx=5, pady=5)

if __name__ == '__main__':
    root = Tk()
    root.title('员工考勤管理')
    # root.state('zoomed')

    interface = LoginInterface(root)
    interface.run()

    root.mainloop()

在将之前的类中执行self.destroy()销毁frame后

原窗口新建frame,下面类中self.pack(expand=1, fill="both")这一句代码有没有又都不影响显示,这又是为什么

class Manager(Frame):
    def __init__(self, parent=None):
        super().__init__(parent)
        # self.pack(expand=1, fill="both")
        self.frame = Frame(self)
        self.frame.pack(expand=1, fill="both", padx=5, pady=5)

    def __manager_view(self):
        Label(text='manager').pack(expand=1,fill='both')

    def run(self):
        self.__manager_view()

img


在这些类中这两句代码又有什么不同,分别销毁的是什么:

self  .frame.destroy()
self.destroy()
  • 写回答

2条回答 默认 最新

  • Smart-Space 2023-04-08 17:01
    关注

    【1】第一段代码中,self指实例化的LoginInterface本身。
    使用interface = LoginInterface(root)后没有布局该控件,所以需要使用self.pack(或self.placeself.grid)布局该控件。

    【2】一共两个Frame:interface和self.frame(也就是interface.frame)。
    self.frame在interface上,也就是self上。

    【3】代码中没有出现实例化Manager类的代码,无法判断和解答你的问题。可能是该类实例化后进行了布局。

    【4】第一行销毁的是interface.frame,第二个销毁的是interface。如果self是在类LoginInterface中的话。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 4月28日
  • 已采纳回答 4月28日
  • 修改了问题 4月2日
  • 修改了问题 4月2日
  • 展开全部