Rechercher : dans
Par :

[python/tkinter] Toplevel et subprocess

Dernière réponse le 31 mar 2008 à 09:24:08 frites.saucisse, le 28 mar 2008 à 14:57:22 
 Signaler ce message aux modérateurs

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é:


# -*- 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.
Configuration: Windows XP
Firefox 2.0.0.13

Meilleures réponses pour « [python/tkinter] Toplevel et subprocess » dans :
Votre première application graphique avec Python et Glade VoirCe guide vous aidera à créer pas à pas votre première application graphique. Nous allons utiliser le langage de programme Python et l'API graphique GTK, en utilisant le logiciel Glade pour créer facilement les interfaces graphiques. C'est de la...
Le langage Python est faiblement typé VoirMythe Le langage de programmation Python est faiblement typé, comme le php ou le Basic. Réalité FAUX. Explications Le Python est un langage à typage fort dynamique. Démonstration: >>> a="toto" >>> b=5 >>> print a+b Traceback (most recent...
[Python] Lire et écrire des fichiers CSV VoirLIRE ET ÉCRIRE DES FICHIERS CSV Python www.python.org, dans sa version 2.4 supporte de facto le format CSV (comma-separated values: valeurs séparées par des virgules). La Library Reference est certes très explicative à ce sujet, mais uniquement...

1

sebsauvage, le 28 mar 2008 à 16:36:30
  • +1

Pas testé, mais essaie de faire un pop.update() juste avant ton comp().

Répondre à sebsauvage

2

frites.saucisse, le 31 mar 2008 à 08:40:38

Merci pour la réponse. Ce pop.update() résout effectivement le problème.

Répondre à frites.saucisse

3

 sebsauvage, le 31 mar 2008 à 09:24:08

Je marque le problème comme "résolu".
(Pense à le faire la prochaine fois qu'un de tes problèmes est résolu :-)

Répondre à sebsauvage