输入按钮不会触发

时间:2018-01-07 16:37:39

标签: python-3.x tkinter

我正在尝试使用python打开谷歌搜索窗口,并且输入按钮触发器不起作用。 因此,如果您按下确认按钮,它应该打开窗口,但它不会。 我也使用tkinter for gui。 帮帮我:(谢谢 (我正在使用胜利10)

import tkinter as tk


def keyup():
    opener()

def opener():

    import webbrowser
    text = name.get().strip()
    query=str(text)
    webbrowser.open("www.google.com/search?rlz=1C1CHZL_koUS766US766&ei=rDxSWtPFOeKt0gK4_YioDg&q="+query)
def clear():
    name.delete(0, 'end')
    root = tk.Tk()
    ler=tk.Label(root, text = "what do you want to search?",font=("Helvetica", 40))
    ler.pack()


name = tk.Entry(root,width=100)
name.pack()

widget=tk.Button(root, text = 'search', command =opener,width=30,height=3)
widget.pack()
widget.bind('<Enter>', opener)
wider=tk.Button(root, text = 'clear', command =clear,width=10,height=3)
wider.pack()




root.mainloop()

我该如何解决这个问题?

3 个答案:

答案 0 :(得分:1)

你有几个错误

    密钥"Enter"
  1. 是事件<Return>。您也可以将<Return>分配给root,即使没有选择/关注按钮,它也能正常工作。

    root.bind('<Return>', opener)
    

    或分配给Entry

    name.bind('<Return>', opener)
    
    仅当"Enter"重点关注时,

    opener才会运行Entry

  2. command=执行没有参数的函数,但bind()使用一个参数执行函数,因此您必须使用带有默认值的参数定义函数,然后它将适用于两者。

    def opener(event=None):
    
  3. 在网址中使用http://,因为您可以使用file://打开本地文件。在没有http://的Linux链接上被视为本地文件。

  4. 更小的错误:将所有import置于顶部以使代码更具可读性,Entry返回字符串,因此您不需要str()

    编辑:添加了name.bind('<Return>', opener)

    import tkinter as tk
    import webbrowser
    
    def opener(event=None):
        text = name.get().strip()
        webbrowser.open("http://www.google.com/search?q="+text)
    
    def clear():
        name.delete(0, 'end')
    
    root = tk.Tk()
    
    ler=tk.Label(root, text="what do you want to search?", font=("Helvetica", 40))
    ler.pack()
    
    name = tk.Entry(root,width=100)
    name.pack()
    name.bind('<Return>', opener) # added 
    
    widget=tk.Button(root, text='search', command=opener, width=30, height=3)
    widget.pack()
    widget.bind('<Return>', opener)
    
    wider = tk.Button(root, text='clear', command=clear, width=10, height=3)
    wider.pack()
    
    root.mainloop()
    

答案 1 :(得分:0)

使用Tk,事件绑定<Enter用于描述光标移动到窗口小部件占用的空间(进入空间)。您希望使用的绑定是<Return>,它映射到键盘上的返回(回车)键。

答案 2 :(得分:0)

我认为它应该是<Return>而不是<Enter>。此外,缩进似乎不正确。