Python:Tkinter LabelFrame:如何使LabelFrame的周围行随窗口扩展

时间:2016-09-07 14:41:15

标签: python-3.x tkinter

我的代码的目的是LabelFrame-line随窗口扩展。我已经查找了几个单独工作但不在我想要使用的类中的不同解决方案。

以下是我想要改编的代码(Code_1):

import tkinter as tk

class window(tk.Frame):
    def __init__(self, master=None):
        super().__init__(master)
        self.pack()

        # LabelFrame
        self.group = tk.LabelFrame(self, text="My first Label Frame")
        self.group.pack(expand="yes", fill="both")

        # Label inside LabelFrame
        self.label = tk.Label(self.group, text="Hello")
        self.label.pack()



root = tk.Tk()
app = window(root)
app.mainloop()

它给了我这个结果:Result_Code_1

这是单独工作的代码(Code_2):

import tkinter as tk

root = tk.Tk()

labelframe = tk.LabelFrame(root, text="This is a LabelFrame")
labelframe.pack(fill="both", expand="yes")

left = tk.Label(labelframe, text="Inside the LabelFrame")
left.pack()

root.mainloop()

Result_Code_2

问题: 导致Code_1和Code_2之间的行为差​​异的原因是什么?我如何修改Code_1以采取与Code_2相同的方式?

1 个答案:

答案 0 :(得分:1)

因为第一个位于根窗口内部的框架内。但第二个是直接在根窗口内,而不是在任何容器小部件内:

class window(tk.Frame):
    def __init__(self, master=None):
        super().__init__(master)
        self.pack()

这意味着只要您让父母Frame,您的小部件就会从self小部件继承。
Frame小部件添加到第二个代码(其父级为root)并将其设为LabelFrame小部件的父级:

frm = tk.Frame(root)
frm.pack()

labelframe = tk.LabelFrame(frm, text="This is a LabelFrame")
labelframe.pack(fill="both", expand="yes")

现在您使用第一个代码获得相同的视图。

并且为了使Code_1的行为与Code_2相同: 改变这个:

class window(tk.Frame):
    def __init__(self, master=None):
        super().__init__(master)
        self.pack()

到此:

class window(tk.Frame):
    def __init__(self, master):
        self.master = master

并改变这一点:

self.group = tk.LabelFrame(self, text="My first Label Frame")

到此:

self.group = tk.LabelFrame(master, text="My first Label Frame")

另外,将app.mainloop()更改为:root.mainloop()