Gönder düğmesine sahip olduğum bir kırpma uygulaması yaptım, bu düğmeye bastığımda request isteği (ctl) metoduna bir tarama isteği giriyor ve tarama ile başlıyor. kireç bana cevap verene kadar inaktif hale gelir. ama ben arka planda devam eden bir süreç durur ve bir dahaki sefere irade düğmesine basarak işlemi yeniden başlatmak için düğmesine basabilirsiniz tkinter uygulamasında başka bir düğme "dur" istiyorum. Ben tkinter kullanılabilir yöntemleri yok denedim ve bıraktınız ama onlar kırpılmış widget kapanır. benim kodudur: -, herhangi bir şekilde sepearte dosyasında mevcut olduğu ve halen i threads.So kullanmıyorum, bağlantılarını taramakta fonksiyon request.get sahippython içindeki request.get komutunu nasıl durduracağım
#!/usr/bin/python
# -*- coding: latin-1 -*-
from Tkinter import *
import thread
from tool_crawler import *
import tkMessageBox
import ttk
# function which accepts url from GUI and pass it further for the
def crawl(url):
time_delay = time_delay_box.get()
if url == "Please enter URL.......":
tkMessageBox.showerror("Error(错误)", "Please enter a valid URL(请输入有效网址)")
elif not url:
tkMessageBox.showerror("Error(错误)", "Please enter a valid URL(请输入有效网址)")
else:
tree.heading("#0", text=url)
links = find_links(url, time_delay)
#print links
for i, link in enumerate(links):
tree.insert("", i, str(i), text=link)
tree.bind("<Double-1>", OnDoubleClick)
# function will invoke when any node in tree is double clicked
def OnDoubleClick(event):
item = tree.identify('item',event.x,event.y)
url = tree.item(item,"text")
index = tree.index(item)
parent = tree.parent(item)
crawl_child(url,index,parent)
def crawl_child(url,index,parent):
links = find_links(url, time_delay)
#print links
for i, link in enumerate(links):
if not parent:
tree.insert(str(index), i, str(index)+"."+str(i), text=link)
else:
tree.insert(str(parent)+"."+str(index), i, str(parent)+"."+str(index)+"."+str(i), text=link)
# tkinter object
top = Tk()
top.configure(background='Lavender')
# window title
top.title("Fan Wan Crawler ")
# tkinter minimum and maximum size
top.minsize(width=1460, height=800)
top.maxsize(width=1460, height=800)
# url entry area i.e. text box to enter the URLS
url = Entry(top, bd =3, width = 180)
url.insert(0, "Please enter URL.......")
url.pack(side = TOP)
# function to show and hide the text on entry and exit
def default(event):
current = url.get()
if current == "Please enter URL.......":
url.delete ("0", END)
elif not current:
url.insert("0", "Please enter URL.......")
# code to call function default on focusin and focusout
url.bind("<FocusIn>", default)
url.bind("<FocusOut>", default)
# submit button which is performing action on submit
submit = Button(top, text="Submit(提交)", width=15, bg='lightblue', command=lambda: crawl(url.get()))
submit.pack(side = TOP)
# time delay label
time_label = Label(top, text="Time Dealy (时间延迟):", font= ("Helvetica", 12), bg="Lavender", fg = "green")
time_label.place(x=2, y=27)
# time delay Entry
time_delay_box = Spinbox(top, from_=0, to=100, width=3)
time_delay_box.place(x=175, y=27)
# time description
time_label = Label(top, text="(in sec.(以秒为单位))", font=("Helvetica", 12), bg="Lavender", fg = "green")
time_label.place(x=220, y=27)
# tree area
tree = ttk.Treeview(top, selectmode="browse", height= "36")
columns = tree.column("#0", minwidth=0, width=720, stretch=True)
tree.place(x=2,y=56)
top.mainloop()
temelde ben arıyorum find_links işlevi yoktur iş parçacığı kullanmadan durdurmak için. Onu durdurmak istemiyorum sadece bu süreci öldürmek istiyorum.
teşekkür ama şu anda çalışan sürecini öldürmeye yüzden mümkündür, sadece bir tarama fonksiyonu bağlantılarını taramakta yöntemi request.get kullanarak diğer dosya thats mevcut find_links arıyorum şu anda konuları kullanmıyorum direkt olarak . ayrıca bununla birlikte, işlemcinin çalışmasına ve sadece birinin gerektiğinde tıklayabileceğinden aktif hale gelmesini durdurmak için tikleyicinin etkin olmamasını istiyorum. Kodu güncelledim. – ashish
GUI'nin olay dizisinde çalışan bir işleminiz olamaz ve düğmelerin ayrı bir konu veya https://docs.python.org/2/library/subprocess.html adresinde olmadan etkin kalmasını sağlayın. Diğer işlevin çağrılması, GUI'nin iş parçacığı işlenene kadar engellenir, böylece durdurma düğmesini tıklayamazsınız. Kök, işlevinizi çağırmak için ana tk penceresi olan root.after gibi bir şeyi kullanmayı deneyebilirsiniz, ancak işlenirken yine de engellenir. – Pythonista
oh kulağa hoş geliyor, ama tkinter işlemi durdurmak için doğrudan bir yöntem sunmuyor mu. request.get aramasını durdurmak istiyorum. – ashish