Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1169 connectés 

  FORUM HardWare.fr
  Programmation
  Python

  mesagebox non blocante

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

mesagebox non blocante

n°2285616
leonhard
Posté le 26-07-2016 à 16:39:48  profilanswer
 

Dans un petit programme, je dois afficher plusieurs message box à divers moments. J'ai utilisé le code suivant:
 

Code :
  1. messagebox.showinfo("Titre", message.text)


 
ça ne fait pas exactement ce que je voudrais, parce que la messagebox est blocante et donc l'exécution du programme ne continue pas tant que l'utilisateur n'a pas cliqué sur le bouton "ok". Y'a-t-il un moyen simple de rendre cette box non blocante ? Peut-on envisager de créer un thread pour chaque box? Sinon est-ce que d'autres API (Qt ou d'autres simple) permettent d'afficher juste une message box non blocante sans devoir écrire trop de code?
 
D'avance merci de votre aide

mood
Publicité
Posté le 26-07-2016 à 16:39:48  profilanswer
 

n°2285670
bistouille
Posté le 28-07-2016 à 06:50:56  profilanswer
 

Je ne crois pas que l'on puisse rendre ces fenêtres non modales.
 
Après, rien ne t"empêche de créer tes propres fenêtres avec une apparence et un comportement similaire, c'est relativement simple à faire vu le minimalisme de ces pop-up.
 
Les thread, non, pas pour ce genre de choses.


---------------
On croit souvent avoir vu le fond de la stupidité humaine, et il parfois nécessaire qu'on vous rappelle qu'elle n'a pas de fond.
n°2285789
leonhard
Posté le 30-07-2016 à 11:00:49  profilanswer
 

bistouille a écrit :

Je ne crois pas que l'on puisse rendre ces fenêtres non modales.
 
Après, rien ne t"empêche de créer tes propres fenêtres avec une apparence et un comportement similaire, c'est relativement simple à faire vu le minimalisme de ces pop-up.
 
Les thread, non, pas pour ce genre de choses.


 
 
Merci de ton aide, je vais continuer de chercher dans la direction que tu m'indiques (tkinter ou qt c'est pas trop ma spécialité). Pour ce qui est d'emballer les messages box chacune dans un thread, en plus d'être une mauvaise idée, il semble que ce ne soit pas possible
 
merci encore de ton aide

n°2285804
bistouille
Posté le 30-07-2016 à 17:53:57  profilanswer
 

Reste sur tkinter, car qt est une bibliothèque très complexe et il faut un temps d'apprentissage beaucoup plus long  pour au moins en comprendre le fonctionnement (énormément de lecture de doc à faire), d'autant qu'avec tkinter on peut déjà faire des trus sympa de façon assez simple.


---------------
On croit souvent avoir vu le fond de la stupidité humaine, et il parfois nécessaire qu'on vous rappelle qu'elle n'a pas de fond.
n°2285806
bistouille
Posté le 30-07-2016 à 19:27:22  profilanswer
 

Un exemple simple d'une fenêtre un peu similaire à celle que tu utilises.
 
Avec une simple image info.gif du genre de http://reho.st/gif/21acba32fc5659f80cd3a040a7905074e9d41cb8.gif que j'ai honteusement pompé sur mon système  :o  
 

Code :
  1. import tkinter as tk
  2. class Info(tk.Toplevel) :
  3.     def __init__(self, parent) :
  4.         tk.Toplevel.__init__(self, parent)
  5.         self._titre = 'Informations'
  6.         self._message = 'Un simple message informatif'
  7.         self._image = './info.gif'
  8.         self._bouton = 'Ok'
  9.         self._commande = self.destroy
  10.     @property
  11.     def titre(self) :
  12.         return self._titre
  13.        
  14.     @titre.setter
  15.     def titre(self, texte:str) :
  16.         self._titre = str(texte)
  17.    
  18.     @property
  19.     def message(self) :
  20.         return self._message
  21.    
  22.     @message.setter
  23.     def message(self, texte:str) :
  24.         self._message = str(texte)
  25.        
  26.     @property
  27.     def image(self) :
  28.         return self._image
  29.        
  30.     @image.setter
  31.     def image(self, fichier:str) :
  32.         self._image = str(fichier)
  33.        
  34.     @property
  35.     def bouton(self) :
  36.         return self._bouton
  37.        
  38.     @bouton.setter
  39.     def bouton (self, texte:str) :
  40.         self._bouton = str(texte)
  41.        
  42.     @property
  43.     def commande(self) :
  44.         return self._commande.__name__
  45.        
  46.     @commande.setter
  47.     def commande(self, commande) :
  48.         if not callable(commande) :
  49.             raise TypeError('La commande doit être un objet callable')
  50.         self._commande = commande 
  51.    
  52.     def afficher(self, image=True, commande=True) :
  53.         self.title(self.titre)
  54.         col = 1
  55.         if image :
  56.             import os.path
  57.             if not os.path.isfile(self._image) :
  58.                 raise FileExistsError('Le fichier ' + str(self._image) + ' n\'existe pas.')
  59.                
  60.             import imghdr
  61.             if imghdr.what(self._image) != 'gif' :
  62.                 raise TypeError('Le fichier ' + str(self._image) + ' n\'est pas une image de type gif')
  63.                
  64.             self._pimg = tk.PhotoImage(file=self._image)
  65.             canevas = tk.Canvas(self, width=self._pimg.width(), height=self._pimg.height(), highlightthickness=0)
  66.             canevas.create_image(0, 0, image=self._pimg, anchor=tk.NW)
  67.             canevas.grid(row=1, column=col, padx=10, pady=10, sticky=tk.N)
  68.             col += 1
  69.         message = tk.Message(self, text=self.message, font=('', -14), aspect=100)
  70.         message.grid(row=1, column=col, padx=10, pady=10)
  71.        
  72.         bouton = tk.Button(self, text=self._bouton, command=self._commande)
  73.         bouton.grid(row=2, column=1, columnspan=col, pady=10)
  74. if __name__ == '__main__' :
  75.     class Application(tk.Frame) :
  76.         def __init__(self) :
  77.             tk.Frame.__init__(self, width=400, height=400)
  78.             self.grid()
  79.             self.grid_propagate()
  80.            
  81.             self.master.title('Mon application')
  82.             tk.Button(text='Hein ?', command=self.hein).grid()
  83.            
  84.         def hein(self) :
  85.             info = Info(self)
  86.             info.titre = 'Informations bizarres'
  87.             info.message = 'Un texte, qui informe, informe, informe encore et encore, et qui au bout d\'un long moment vous déforme jusqu\'à ce que vous explosiez en mille milliards de morceaux qui seront ensuite dispersés dans l\'information, et ... \n\nDans une nouvelle fenêtre, celle-ci sera de nouveau affichée dans un texte qui informe, informe ...'
  88.             info.bouton = 'Un faux ?'
  89.             info.commande = self.master.destroy
  90.             info.afficher()
  91.     app = Application()
  92.     app.mainloop()


 
Le code est très très simple.
Mais attention, vu que cette fenêtre n'est pas modale, on peut ouvrir indéfiniment la même fenêtre via la fenêtre root, donc faudra ajouter un test de façon à ne l'ouvrir qu'une seule fois, du moins si c'est que tu souhaites.


---------------
On croit souvent avoir vu le fond de la stupidité humaine, et il parfois nécessaire qu'on vous rappelle qu'elle n'a pas de fond.
n°2285864
leonhard
Posté le 01-08-2016 à 16:10:42  profilanswer
 

bistouille a écrit :

Un exemple simple d'une fenêtre un peu similaire à celle que tu utilises.
 
Avec une simple image info.gif du genre de http://reho.st/gif/21acba32fc5659f [...] d41cb8.gif que j'ai honteusement pompé sur mon système  :o  
 
[[...]
 
Le code est très très simple.
Mais attention, vu que cette fenêtre n'est pas modale, on peut ouvrir indéfiniment la même fenêtre via la fenêtre root, donc faudra ajouter un test de façon à ne l'ouvrir qu'une seule fois, du moins si c'est que tu souhaites.


 
 
Bon ok je peux accepter que tu fasses mon boulot, mais que tu le fasses mieux que je n'aurais su le faire, alors là non !  :pt1cable: En étudiant ce code, je risque d'apprendre des choses, mais bon, faut savoir vivre dangereusement :)
 
Merci encore de ton aide !
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Python

  mesagebox non blocante

 

Sujets relatifs
Plus de sujets relatifs à : mesagebox non blocante


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR