Je suis en train de me débrouiller avec Tkinter et Python. J'ai un gui de base avec quelques boutons, un bouton s'en va et fait quelque chose qui prend du temps, ce qui est variable. Le problème est que quand je tape sur ce bouton, l'ensemble de mon interface graphique se bloque/ne s'affiche pas correctement - je suppose que c'est parce qu'il essaye de faire ces choses qui prennent du temps et bloquent l'interface graphique.Bouton tkinter python exécuté en arrière-plan commande
J'ai regardé dans le filetage et les files d'attente, mais je ne peux pas le comprendre. Je pense que j'ai besoin de déclencher ma méthode de recherche sur un fil, puis mettre en file d'attente les résultats à mesure qu'ils reviennent et mettre à jour la liste en revenant?
Je suis sur Windows si cela fait une différence dans la façon dont j'utilise les threads.
Cordialement
david
Code de base ci-dessous.
class Search:
def __init__(self, master):
self.seeds = []
frame = Frame(master, width=700, height=500)
frame.pack_propagate(0)
frame.pack(expand=YES, fill=BOTH)
#
# Search results
#
l2 = Label(frame, text="results")
l2.pack(anchor=W)
self.resultfield = Listbox(frame, selectmode=BROWSE)
self.resultfield.grid(row=3, column=1, sticky=N+W+S+E, columnspan=3)
self.resultfield.pack(fill=BOTH)
frame1 = Frame(frame)
frame1.pack()
# Button to action the search
self.getSearchbut = Button(frame1, text="Do Search", command=self.getSearch)
self.getSearchbut.grid(row=1, column=2)
self.getSearchbut.pack()
def getSearch(self):
sa = SearchApi(self.seeds)
results = sa.lookup(self)
for result in results:
self.resultfield.insert(END, user)
def putCSV(self):
print "put the csv files"
class SearchApi:
def __init__(self, seeds):
self.seeds = seeds
def lookup(self):
results = []
# I do something here that takes a while
return results
if __name__ == "__main__":
root = Tk()
root.title("Search")
app = Search(root)
root.mainloop()
Pourriez-vous poster le code que vous avez essayé? Au-dessus de ma tête et de mon expérience, une fois que vous éteignez le fil, les problèmes se centrent généralement soit ne programmant pas le fil pour rester autour ou le fil lui-même se bloque et n'a pas le moyen d'abandonner et de renoncer au contrôle GUI. – spade78
Ce n'est pas lié à TKinter de toute façon ... – juancarlospaco