我的代码的目的是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()
问题: 导致Code_1和Code_2之间的行为差异的原因是什么?我如何修改Code_1以采取与Code_2相同的方式?
答案 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()
。