[python/tkinter] Toplevel et subprocess
Résolu
frites.saucisse
-
sebsauvage Messages postés 32893 Date d'inscription Statut Modérateur Dernière intervention -
sebsauvage Messages postés 32893 Date d'inscription Statut Modérateur Dernière intervention -
Bonjour,
J'ai une application avec un bouton qui déclenche une compilation Latex (avec un subprocess.call()). Comme la compilation prend un certain temps, je souhaite avoir un popup sous forme de Toplevel qui dit à l'utilisateur "t'excite pas, je bosse" et disparaît lorsque la compilation est terminée. [Si dans ce popup pouvait s'afficher des informations sur l'avancée de la tâche en arrière plan (i.e. les informations qui sont affichées dans la console DOS) je serais encore plus heureux.]
Pour les besoins du forum, j'ai essayé de bricoler un code simplifié:
Le comportement de ce code est légèrement différent de celui de mon programme complet: ici, le popup n'apparaît simplement pas (ou peut-être disparaît-il trop vite); dans mon programme complet, la fenêtre apparaît mais n'est pas complète, comme si le programme oubliait de finir le popup avant de passer à la suite.
Toute aide pour résoudre ce problème est la bienvenue! Merci d'avance.
J'ai une application avec un bouton qui déclenche une compilation Latex (avec un subprocess.call()). Comme la compilation prend un certain temps, je souhaite avoir un popup sous forme de Toplevel qui dit à l'utilisateur "t'excite pas, je bosse" et disparaît lorsque la compilation est terminée. [Si dans ce popup pouvait s'afficher des informations sur l'avancée de la tâche en arrière plan (i.e. les informations qui sont affichées dans la console DOS) je serais encore plus heureux.]
Pour les besoins du forum, j'ai essayé de bricoler un code simplifié:
# -*- coding: cp1252 -*- from Tkinter import * import subprocess def comp(): for i in range(3): subprocess.call(["latex", "test.tex"]) def start(): pop=Toplevel() pop.resizable(width=False, height=False) pop.grab_set() pop.focus_set() pop.title("PopUp") w=250 h=220 pop.geometry("%dx%d+%d+%d" %(w,h,(pop.winfo_screenwidth()-w)/2,(pop.winfo_screenheight()-h)/2)) ca=Canvas(pop,bd=0,highlightthickness=0,bg='white') ca.pack(fill=BOTH, expand=1) cb=Canvas(ca,bd=0,highlightthickness=0,bg='white') cb.grid(row=0, sticky=N+S+E+W) ca.grid_rowconfigure(0, weight=1) ca.grid_columnconfigure(0, weight=1) lb=Label(cb,text='Je suis un popup',bg='white') lb.grid() comp() pop.destroy() root=Tk() wt=root.winfo_screenwidth() ht=root.winfo_screenheight() w=300 h=300 root.geometry("%dx%d+%d+%d" % (w,h, (wt-w)/2, (ht-h)/2 ) ) # create a canvas with no internal border can=Canvas(root,bd=0, highlightthickness=0) can.pack(fill=BOTH, expand=1) Button(can, text='Start',command=start).pack() Button(can, text='Ciao',command=root.destroy).pack() root.mainloop()
Le comportement de ce code est légèrement différent de celui de mon programme complet: ici, le popup n'apparaît simplement pas (ou peut-être disparaît-il trop vite); dans mon programme complet, la fenêtre apparaît mais n'est pas complète, comme si le programme oubliait de finir le popup avant de passer à la suite.
Toute aide pour résoudre ce problème est la bienvenue! Merci d'avance.