Tkinter LabelFrames 不显示

问题描述

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

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",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,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 不会返回任何内容,因此很自然它们都不会出现。我相信这就是您想要的:

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

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

import tkinter as tk
from tkinter import *
from tkinter import filedialog
from PIL import ImageTk,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,pady=10)
        self.options.grid(row=1,column=0)
        
    def create_entries(self):
        python_path = StringVar(self.set_paths,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()

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...