You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Tkinter无法访问Toplevel窗口内创建的Entry控件问题

问题根源

这个报错和Toplevel窗口没有任何关系,是Tkinter的基础语法特性导致的:

  • Tkinter所有控件的pack()、grid()、place()三个布局方法,返回值固定为None
  • 你写entryrows=Entry(popup,width=5).place(x=160,y=130)时,逻辑是先创建Entry控件实例,立刻调用place方法完成布局,最后把place方法的返回值(也就是None)赋值给entryrows变量。变量根本没有保存Entry控件的实例,调用insert、get方法时自然会抛出'NoneType' object has no attribute 'insert'错误。
    你之前在普通窗口使用Entry没出问题,只是当时没有把控件创建和布局调用链式写在一行赋值而已。
修复方案

把控件创建和布局操作拆成两行独立执行:先用变量接收创建好的控件实例,再单独调用布局方法设置位置。按照这个写法,不管控件放在根窗口还是Toplevel窗口,都可以正常访问、操作。
修正后的可运行代码:

from tkinter import *

window = Tk()
window.geometry('1000x580')

popup = Toplevel(window)
popup.geometry("300x400")

# 拆分创建控件和布局的步骤
entrycolumns = Entry(popup, width=5)
entrycolumns.place(x=100, y=130)
entryrows = Entry(popup, width=5)
entryrows.place(x=160, y=130)

# 现在可以正常操作控件
entryrows.insert(0, "test")
print(entryrows.get())

window.mainloop()

额外提示:Tkinter程序只需要对根窗口调用一次mainloop()即可,不需要给Toplevel顶级窗口单独调用mainloop,多余的事件循环调用反而可能引发交互异常。


内容的提问来源于stack exchange,提问作者Lion In A Box

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 09:36:16