Tkinter中无法将Label放在网格中间位置,代码存在什么问题?
错误原因
核心问题是 Tkinter 的布局方法grid()、pack()、place()的返回值均为None,你将控件创建、布局操作和变量赋值合并编写,导致变量实际没有拿到控件对象:
- 你编写的
B = Frame(A, borderwidth=1, relief="solid").grid(row=1, column=1)执行后,变量B的实际值是None,而非你预期的Frame实例 - 后续创建
Label(B, text="ANOTHER TEST")时,父控件参数为None的情况下,Tkinter会默认将根窗口root作为该标签的父控件,因此标签会被放在root的布局流中,而非Frame A的中间位置
修正方案
将控件创建和布局操作分开编写,先完成控件实例的赋值,再单独调用布局方法即可:
# 原错误代码:B = Frame(A, borderwidth=1, relief="solid").grid(row=1, column=1) # 修改为以下两行 B = Frame(A, borderwidth=1, relief="solid") B.grid(row=1, column=1) BLabel = Label(B, text="ANOTHER TEST").grid()
补充说明:你代码中A0到A7的变量同理,实际赋值的都是
None,只是你后续没有调用这些变量,所以没有触发报错,如果后续需要修改这些Label的属性,也需要按上述逻辑拆分编写。
内容的提问来源于stack exchange,提问作者Heikki
相关产品推荐
相关产品推荐

