[英]Python: Tkinter LabelFrame: How to make the surrounding line of the LabelFrame expand with the window
我的代碼的目的是LabelFrame-line
隨窗口擴展。 我已經查找了幾種單獨使用的解決方案,但不在我要使用的類中。
以下是我要修改的代碼(代碼_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
這是單獨工作的代碼(代碼_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相同?
因為第一個在根窗口本身內部的框架內。 但是第二個是直接在根窗口內,而不是在任何容器小部件內:
class window(tk.Frame):
def __init__(self, master=None):
super().__init__(master)
self.pack()
這意味着只要您使它們的父母self
您的小部件就會從Frame
小部件繼承。
將Frame
小部件添加到第二個代碼(其父LabelFrame
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()
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.