使用tkinterweb时Enter键绑定异常:函数立即执行而非触发时执行
问题解决:Enter键绑定失效与函数提前执行
这不是tkinterweb的问题,是你绑定事件的写法错误导致的:
错误写法:
searchbutton.bind('<Return>', infosearch())
这里的infosearch()会在代码执行到这一行时立即调用函数,并把函数的返回值(此处为None)作为绑定的回调,所以按下Enter键时无响应,反而程序启动就弹出了窗口。正确写法:
searchbutton.bind('<Return>', infosearch)
直接传递函数对象infosearch(不带括号),这样bind会在触发<Return>事件时才调用该函数。
另外补充两个优化点:
- 输入框的
textvariable参数需要传入tkinter.StringVar()对象,而非字符串"infofile",否则该参数无效。 - 更符合用户操作习惯的做法是把Enter键绑定到输入框(
Title),用户输入完成后直接按Enter就能触发搜索。
修改后的完整代码:
import tkinter from tkinterweb import HtmlFrame proj = tkinter.Tk() proj.geometry("550x550") proj.title("Offline Info Files") proj.bind('<Escape>', lambda e: proj.quit()) def infosearch(Event=None): target = "Search" codesnip = "<h1>HELLO THERE!</h1>" popup = tkinter.Toplevel() popup.geometry("1100x700") popup.title("Info " + str(target)) frame = HtmlFrame(popup) frame.pack(fill="both", expand=True) frame.load_html(codesnip) # 修正textvariable参数 infofile_var = tkinter.StringVar() Title = tkinter.Entry(bd=1, width=20, font=("Courier New", 12), textvariable=infofile_var) Title.pack() searchbutton = tkinter.Button(text=" Search ", font=("Courier New",12), command=infosearch) searchbutton.pack() # 绑定到输入框,用户输入完按Enter直接搜索 Title.bind('<Return>', infosearch) Title.focus_set() proj.mainloop()
内容的提问来源于stack exchange,提问作者PKovitch734
相关产品推荐
相关产品推荐

