这是一个搜索栏程序,一旦按下Enter键,它将用我搜索的内容打开google:
import tkinter as tk
from tkinter import ttk
import webbrowser
root = tk.Tk()
root.title("Search Bar")
label1 = ttk.Label(root, text="Query")
label1.grid(row=0, column=0)
entry1 = ttk.Entry(root, width=50)
entry1.grid(row=0, column=1)
def callback():
webbrowser.open("http://google.com/search?q="+entry1.get())
def get(event):
webbrowser.open("http://google.com/search?q=" + entry1.get())
button1 = ttk.Button(root, text="Search", width=10, command=callback)
button1.grid(row=0, column=2)
entry1.bind("<Return>", get)
root.mainloop()
我最困惑的是为什么我需要第二个函数[get(event)]来绑定entry1.bind("<Return>", get)
处的回车键。为什么我不能只放entry1.bind("<Return>", callback)
(用于按钮)。出于某种原因,entry bind函数需要一个参数,我只想解释为什么是这样?即使该参数中的任何内容都没有被调用。
答案 0 :(得分:2)
您可以使用
def callback(event=None):
或者您可以将None作为参数传递
import tkinter as tk
from tkinter import ttk
import webbrowser
root = tk.Tk()
root.title("Search Bar")
label1 = ttk.Label(root, text="Query")
label1.grid(row=0, column=0)
entry1 = ttk.Entry(root, width=50)
entry1.grid(row=0, column=1)
def callback():
webbrowser.open("http://google.com/search?q="+entry1.get())
def get(event):
webbrowser.open("http://google.com/search?q=" + entry1.get())
button1 = ttk.Button(root, text="Search", width=10, command=lambda x=None:get(x))
button1.grid(row=0, column=2)
entry1.bind("<Return>", get)
root.mainloop()
答案 1 :(得分:1)
您可以在{p>中使用event=None
def callback(event=None):
然后可以与command=
和bind()
一起使用
bind()
将与event
一起运行,command=
将其无事件运行,并且将使用None
import tkinter as tk
from tkinter import ttk
import webbrowser
def callback(event=None):
webbrowser.open("http://google.com/search?q="+entry1.get())
root = tk.Tk()
root.title("Search Bar")
label1 = ttk.Label(root, text="Query")
label1.grid(row=0, column=0)
entry1 = ttk.Entry(root, width=50)
entry1.grid(row=0, column=1)
button1 = ttk.Button(root, text="Search", width=10, command=callback)
button1.grid(row=0, column=2)
entry1.bind("<Return>", callback)
root.mainloop()
bind()
可以与不同的事件和对象一起使用,因此它将此信息发送给函数-即。 event.widget
-因此您可以将相同的功能绑定到不同的对象。
def callback(event=None):
print(event)
if event: # if not None
print(event.widget)