Tkinter LabelFrames 不显示

Tkinter LabelFrames don't show up

当我想要布置我的框架时,标签不显示。我似乎无法解决它。出于某种原因,它确实显示了我所做的条目。有人可以帮帮我吗

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

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

你必须制作一个小部件的对象而不是小部件的网格功能。网格 returns 没有什么会如此自然 none 会出现。我相信这就是您想要的:

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”不包含任何不会显示的内容,以后要小心

这将显示两个 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()