Python:使用按钮获取Tkinter的Entry值时出错
这是我学习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)
STICKY
是 N+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
就可以了(注意这里没有括号)。