Tkinter LabelFrames 不显示

Posted

技术标签:

【中文标题】Tkinter LabelFrames 不显示【英文标题】:Tkinter LabelFrames don't show up 【发布时间】:2021-06-06 05:50:15 【问题描述】:

当我想要布局我的框架时,标签不会出现。我似乎无法解决它。出于某种原因,它确实显示了我所做的条目。谁能帮帮我。

import tkinter as tk
from tkinter import *
from tkinter import filedialog
from PIL import ImageTk, Image


class main_screen():
    def __init__(self, master):
        self.master = master
        self.master.title("Roboframe")
        self.master.geometry("650x650")
        self.create_frames()
        self.create_entries()

    def create_frames(self):
        self.top = Frame(self.master).grid(row=0,column=0)
        self.bottom = Frame(self.master).grid(row=0, column=0)
        self.set_paths = LabelFrame(self.master, text="Set Path", padx=10, pady=10).grid(row=0,column=0)
        self.options = LabelFrame(self.master, text="Options", padx=10, pady=10).grid(row=0,column=0)

    def create_entries(self):
        python_path = StringVar(self.set_paths, "C:/Python37/python.exe")
        robot_path = StringVar(self.set_paths, "C:/ws/cmge.automation/RobotFrameworkCMGE")
        self.set_path_python = Entry(self.set_paths, width=60, textvariable=python_path).grid(row=0,column=0)
        self.set_path_robot = Entry(self.set_paths, width=60, textvariable=robot_path).grid(row=1, column=0)

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

Output of code shown above

The thing i'm rewritting the code for because it is a mess

第二张图也是我自己做的。但是代码是一团糟。

【问题讨论】:

grid 方法将返回 None。例如,初始化标签框架并将其引用保存在self.set_paths 中,然后使用它来调用gridself.set_paths = LabelFrame(self.master, text="Set Path", padx=10, pady=10);self.set_paths.grid(row=0,column=0) 【参考方案1】:

您必须制作小部件的对象而不是小部件的网格功能。 Grid 没有返回任何内容,因此它们自然不会出现。我相信这就是您想要的:

import tkinter as tk
from tkinter import *
from tkinter import filedialog
from PIL import ImageTk, Image


class main_screen():
    def __init__(self, master):
        self.master = master
        self.master.title("Roboframe")
        self.master.geometry("650x650")
        self.create_frames()
        self.create_entries()

    def create_frames(self):
        # you have grided all of your frames and label frames on the same row and column
        self.top = Frame(self.master)
        self.top.grid(row=0,column=0)
        self.bottom = Frame(self.master)
        self.bottom.grid(row=0, column=0)
        self.set_paths = LabelFrame(self.master, text="Set Path", padx=10, pady=10)
        self.set_paths.grid(row=0,column=0)
        self.options = LabelFrame(self.master, text="Options", padx=10, pady=10)
        self.options.grid(row=0,column=0)

    def create_entries(self):
        python_path = StringVar(self.set_paths, "C:/Python37/python.exe")
        robot_path = StringVar(self.set_paths, "C:/ws/cmge.automation/RobotFrameworkCMGE")
        self.set_path_python = Entry(self.set_paths, width=60, textvariable=python_path)
        self.set_path_python.grid(row=0,column=0)
        self.set_path_robot = Entry(self.set_paths, width=60, textvariable=robot_path)
        self.set_path_robot.grid(row=1, column=0)

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

还有几件事:

您以两种不同的方式导入了两次 tkinter,只使用其中一种方式 您在同一行和同一列上对 LabelFrames 和框架进行了网格化,但由于“self.options”不包含任何不会显示的内容,请稍后小心

【讨论】:

感谢这对我有用!我现在已经导入了一次 tkinter。关于options。我稍后会填写那个,谢谢你通知我。至于FrameLabelFrame。我想当我想制作网格布局时,我可以制作 2 个框架,我可以用所有必要的东西填充这些框架,以创建更容易布局的东西。还是我只需要LabelFrames 来实现同样的目标?在LabelFrame set_paths 中的项目旁边,我想添加一张图片。上面没有标签设置路径。所以我认为需要一个不同的框架,我可以在其中添加图像 是的,这是可能的,但请记住,将框架和标签框架放在同一行和列上时它们会重叠,此外,当使用框架作为容器时,我个人更喜欢 .pack 而不是网格,因为在我看来,网格并不是放置框架的最佳选择,您可能希望在框架的网格函数中添加“sticky”或“rowspan”或“columnspan”关键字。很高兴我能帮上忙【参考方案2】:

这将显示两个 LabelFrames,第二个带有一个虚拟的 Entry 小部件。

import tkinter as tk
from tkinter import *
from tkinter import filedialog
from PIL import ImageTk, Image


class main_screen():
    def __init__(self, master):
        self.master = master
        self.master.title("Roboframe")
        self.master.geometry("650x650")
        self.create_frames()
        self.create_entries()

    def create_frames(self):
        self.set_paths = LabelFrame(self.master, text="Set Path", padx=10, pady=10)
        self.set_paths.grid(row=0,column=0)
        self.options = LabelFrame(self.master, text="Options", padx=10, pady=10)
        self.options.grid(row=1,column=0)
        
    def create_entries(self):
        python_path = StringVar(self.set_paths, "C:/Python37/python.exe")
        robot_path = StringVar(self.set_paths, "C:/ws/cmge.automation/RobotFrameworkCMGE")
        self.set_path_python = Entry(self.set_paths, width=60, textvariable=python_path)
        self.set_path_python.grid(row=0,column=0)
        self.set_path_robot = Entry(self.set_paths, width=60, textvariable=robot_path)
        self.set_path_robot.grid(row=1, column=0)
        self.test = Entry(self.options, width=60)
        self.test.grid(row=1, column=1)
        

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

【讨论】:

以上是关于Tkinter LabelFrames 不显示的主要内容,如果未能解决你的问题,请参考以下文章

跪求各路大神!解答困惑 安卓手机连接电脑,用电脑打开手机视频文件大图标预览视频不显缩略画面,苹果可以

如果在函数中创建,为啥 Tkinter 图像不显示?

如果在函数中创建,为啥 Tkinter 图像不显示?

如何在不显式编译的情况下让 Visual Studio 错误检查我的代码(显示曲线)?

如何解释在步骤 2 中 IV 不显着但仍显示显着 F 的分层回归输出

为啥我在 Tkinter 中的饼图不显示?