簡體   English   中英

Python:Tkinter LabelFrame:如何使LabelFrame的周圍線隨窗口擴展

[英]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()

Result_Code_2

問題:是什么導致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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM