Python:使用按钮获取Tkinter的Entry值时出错

0 投票
1 回答
1310 浏览
提问于 2025-04-18 07:41

这是我学习Python的第一天,希望大家能理解我这个新手的问题。

我有一个用Tkinter做的图形界面,布局是这样的:

Label(base, text="Site URL: ",width=15).grid(row=0,column=0,sticky=STICKY,pady=5)
entry1 = Entry(base, width=40).grid(row=0,column=1,sticky=STICKY,pady=5)
mybtn = Button(base, text="Run",command=s.initiate(entry1.get())).grid(row=0,column=2,sticky=STICKY,padx=10,pady=5)

STICKYN+S+E+W,用于网格布局,s 是我从 s.initiate 这个模块导入的,像这样(在我的主文件顶部):

import spider as s

spider 模块的内容是这样的:

import tkMessageBox

def initiate(url):
    tkMessageBox.showinfo("Spider", url)

当我尝试编译我的代码时,出现了这个错误:

File "index.py", line 18, in <module>
  mybtn = Button(base, text="Run",command=s.initiate(entry1.get())).grid(row=0,column=2,sticky=STICKY,padx=10,pady=5)
AttributeError: 'NoneType' object has no attribute 'get'

有人能解释一下我在按钮点击时从 Entry 获取值时做错了什么吗?

我猜 get() 在编译代码时就被执行了,但 entry1 还没有被Python注册到Tkinter的图形界面上。如果这个猜测是对的,有人能给我一个解决办法吗?

1 个回答

1

试试这样做:

entry1=Entry(base, width=40)
entry1.grid(row=0,column=1,sticky=STICKY,pady=5)

问题在于你使用了一个值为 None 的变量,当你执行 None.get() 时,就会出现错误。这个值之所以是 None,是因为 entry1 的值是最后一个调用的函数的返回值,而这个函数是 grid(),它总是返回 None

编辑:

函数自动被调用是因为 你自己 调用了它。如果你想给一个函数传递一些参数,可以这样做:

command=lambda:myfunc(myargs)

另外,如果你不想传递任何参数,简单地写 command=myfunc 就可以了(注意这里没有括号)。

撰写回答