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
中,然后使用它来调用grid
。 self.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
。我稍后会填写那个,谢谢你通知我。至于Frame
和LabelFrame
。我想当我想制作网格布局时,我可以制作 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 不显示的主要内容,如果未能解决你的问题,请参考以下文章
跪求各路大神!解答困惑 安卓手机连接电脑,用电脑打开手机视频文件大图标预览视频不显缩略画面,苹果可以
如何在不显式编译的情况下让 Visual Studio 错误检查我的代码(显示曲线)?