运行Tkinter代码触发TclError报错bad option "-bd"该如何修复?
Tkinter报错修复方案
错误原因
你对pack()布局方法的传参规则使用错误:
pack()方法没有可接收父容器的位置参数,你直接把upper、lower框架对象作为第一个位置参数传入pack(),会被Tkinter识别为无效的配置选项,因此触发参数不匹配的TclError。
两种修复方案
- 方案1(更推荐,代码逻辑更清晰):创建Label组件时直接指定正确的父容器
master参数,不需要在pack时额外指定所属容器 - 方案2:保留现有Label的master配置,将pack调用的第一个位置参数改为显式命名参数
in_=容器对象(加下划线是因为in是Python保留关键字)
完整可运行的修正代码
from tkinter import * root = Tk() upper = Frame(root) upper.pack(side=TOP, fill=X) lower = Frame(root) lower.pack(side=BOTTOM, fill=BOTH, expand=True) # 创建时直接指定所属父容器 icon = Label(upper, text='One', bg='red', fg='white') icon.pack(side=LEFT) spacing = Label(upper, bg='red') spacing.pack(side=RIGHT, fill=X, expand=True) fill = Label(lower, text='Two', bg='green', fg='black') fill.pack(fill=BOTH, expand=True) root.mainloop()
如果采用方案2修改,只需要把原有3次pack调用改成如下写法即可:
icon.pack(in_=upper, side=LEFT) spacing.pack(in_=upper, side=RIGHT, fill=X) fill.pack(in_=lower, fill=BOTH, expand=True)
内容的提问来源于stack exchange,提问作者farderer
相关产品推荐
相关产品推荐

