Display a label while pressing the button in my GUI
Peter Otten
__peter__ at web.de
Mon Jan 30 04:31:01 EST 2017
hmmeeranrizvi18 at gmail.com wrote:
> Hello Guys,
> Here i am creating a GUI which will act as a search engine that will find
> the results from the browser and save the results as a xls file. When i
> typed something in my search box and click the (GO)button.It should
> display search in progress.when the file is saved it should display done.
> How to do that? My button gets hung for a seconds.We should give any
> timeout for that?
Move the actual processing into another thread and have it communicate with
your GUI through a Queue. Here's a sketch:
import Queue
import threading
from Tkinter import *
import mechanize
def clear_search(event):
search.delete(0, END)
def start_search():
thread = threading.Thread(
target=fun,
args=(search.get(),)
)
thread.setDaemon(True)
thread.start()
root.after(100, check_state)
def fun(new):
queue.put("searching")
url = "http://duckduckgo.com/html"
br = mechanize.Browser()
br.set_handle_robots(False)
br.open(url)
br.select_form(name="x")
br["q"] = str(new)
res = br.submit()
queue.put("writing result")
content = res.read()
with open("result1.xls", "w") as f:
f.write(content)
queue.put("done")
def check_state():
while True:
try:
message = queue.get_nowait()
except Queue.Empty:
break
state_info["text"] = message
if message == "done":
return
root.after(100, check_state)
queue = Queue.Queue()
root = Tk()
top_findings = Label(root, text="Top Findings:", font="-weight bold")
top_findings.pack()
search = Entry(root, width=100)
search.insert(0, "Enter the value to search")
# Did you see Christian Gollwitzer's post?
search.bind("<FocusIn>", clear_search)
search.pack()
go_button = Button(root, text="GO", width=5, command=start_search)
go_button.pack()
state_info = Label(root)
state_info.pack()
root.mainloop()
More information about the Python-list
mailing list