python - 使用网格(tkinter)时标签超出嵌套框架
问题描述
这只是一个简单的问题,但是当您使用 Sticky 时,标签不应该留在它的嵌套框架内吗?在我的代码中,它只保留在父框架中。如果正常有解决办法吗?
我试过查看文档,但没有找到任何可以帮助的东西。
from tkinter import *
from tkinter import ttk
root = Tk()
root.title("Tk test")
root.geometry("800x800")
frame_1 = ttk.Frame(root, relief="sunken", height="400", width="400").grid(row=0, column=0, rowspan=1, columnspan=1)
frame_2 = ttk.Frame(frame_1, relief="sunken", height="200", width="200").grid(row=0, column=0, rowspan=1, columnspan=1)
label_1 = ttk.Label(frame_2, text="Text").grid(row=0, column=0, sticky="N, E")
root.mainloop()
预期结果:标签保留在嵌套在父框架内的框架内。实际结果:它只停留在父框架内
解决方案
.grid(...)
函数None
返回。因此,当你这样做
frame_1 = ttk.Frame(root, relief="sunken", height="400", width="400").grid(row=0, column=0, rowspan=1, columnspan=1)
你分配None
给frame_1
. frame_2
和也是如此label_1
。
因为frame_1 == None
,调用ttk.Frame(frame_1, ...)
其实和ttk.Frame(None, ...)
. 因此,您没有传递主窗口,默认情况下将根窗口作为主窗口。同样,创建label_1
.
解决方法是将小部件的创建和放置分成两行:
from tkinter import *
from tkinter import ttk
root = Tk()
root.title("Tk test")
root.geometry("800x800")
frame_1 = ttk.Frame(root, relief="sunken", height="400", width="400")
frame_1.grid(row=0, column=0, rowspan=1, columnspan=1)
frame_2 = ttk.Frame(frame_1, relief="sunken", height="200", width="200")
frame_2.grid(row=0, column=0, rowspan=1, columnspan=1)
label_1 = ttk.Label(frame_2, text="Text")
label_1.grid(row=0, column=0, sticky="N, E")
root.mainloop()
推荐阅读
- c# - “Guid.NewGuid”违反了协调器确定性代码约束
- c++ - 难以理解 C++ 中的 const(无法绑定非 const 左值引用)
- node.js - 在 Elasticsearch 端点指定字段上进行基于脚本的排序
- android - 实时数据库未将数据推送到 Firebase
- android - 构建我的第一个 Android 项目时“无法创建 Java 虚拟机”
- r - 尝试逐行比较两个数据帧与 R 中的许多列并标记不正确的行
- perl - 有没有办法强制在 PDF::API2 中提前渲染图像?
- python - OOP - 初始化方法不改变类属性
- microservices - 带有 ui 的应用程序可以是微服务
- spring-boot - Spring Boot SAML 和 AWS Cognito