Python Tkinter获取Entry值报错 混用grid与pack布局冲突如何解决
Tkinter注册模块布局冲突&Entry取值问题解决方案
报错原因
Tkinter规定同一个父控件内只能使用一种布局管理器(grid/pack/place中的一种),你的Toplevel窗口sw内的所有控件都使用grid布局,但在signup_work回调函数中新建的显示密码的标签调用了pack()方法,两种布局逻辑冲突触发报错,和窗口的geometry尺寸设置方法无关。
修复方案
方案1:统一使用grid布局(推荐,改动最小)
将signup_work函数中的pack调用替换为grid,分配未被占用的行号即可:
def signup_work(): p = password.get() my_p = Label(sw, text=p) my_p.grid(row=9, column=0) # 和现有布局逻辑对齐,使用未被占用的第9行
方案2:嵌套容器实现混合布局
如果确实需要使用pack布局,可以新增一个独立的Frame容器,将Frame用grid放到主窗口后,在Frame内部使用pack:
def signup_work(): p = password.get() # 新建独立布局容器 display_frame = Frame(sw) display_frame.grid(row=9, column=0) # Frame内部可自由使用pack布局 my_p = Label(display_frame, text=p).pack()
额外注意事项
你当前代码中缺少font1和font2的定义,运行前需要先补充字体配置,示例:
# 放在常量定义区域即可 font1 = ("微软雅黑", 16, "bold") font2 = ("微软雅黑", 12)
修改完成后password.get()就可以正常获取到Entry控件的输入值,不会再触发布局冲突报错。
内容的提问来源于stack exchange,提问作者Aaseer
相关产品推荐
相关产品推荐

