Hello Stack社区,
当我尝试编写一个简单的谷歌搜索栏GUI应用程序时,我似乎在可点击的GUI按钮或工作键盘命令之间进行了权衡。 这取决于通过自我'进入名为' google'的功能。没有' self' GUI Submit按钮将起作用,Enter键将在控制台中引发错误。随着自我'传入谷歌,Enter键将工作,但GUI提交按钮引发相反的错误。它与传递给此函数的参数数量有关' google'。
有没有办法让提交按钮和Enter键都有效?
在此示例中,GUI Submit按钮有效,Enter键将显示错误:
cb2
答案 0 :(得分:2)
失败的原因是Tkinter
回调函数传递了一个事件参数。所以你传递的任何回调都必须有这个论点。添加参数会为绑定修复它,但会为提交打破它。
这是因为对于提交没有参数传递,你的函数现在需要一个参数。所以基本上它意味着你不能为这两个目的使用相同的功能。
绕过这个的一个简单方法是在bind调用中使用lambda。
root.bind("<Return>", lambda e: google())
答案 1 :(得分:2)
为没有任何内容传递给函数的时间添加默认值。因为你不使用它并不重要。
def google(event=None):
print("google function called")
## url = "https://www.google.nl/#q=" + search.get()
## webbrowser.open_new_tab(url)
#GUI
root = Tk()
search = StringVar()
ttk.Entry(root, textvariable=search).grid()
submit = ttk.Button(root, text="Search", command=google).grid()
root.bind("<Return>", google)
root.mainloop()