bistouille | Un exemple simple d'une fenêtre un peu similaire à celle que tu utilises.
Avec une simple image info.gif du genre de que j'ai honteusement pompé sur mon système
Code :
- import tkinter as tk
- class Info(tk.Toplevel) :
- def __init__(self, parent) :
- tk.Toplevel.__init__(self, parent)
- self._titre = 'Informations'
- self._message = 'Un simple message informatif'
- self._image = './info.gif'
- self._bouton = 'Ok'
- self._commande = self.destroy
- @property
- def titre(self) :
- return self._titre
-
- @titre.setter
- def titre(self, texte:str) :
- self._titre = str(texte)
-
- @property
- def message(self) :
- return self._message
-
- @message.setter
- def message(self, texte:str) :
- self._message = str(texte)
-
- @property
- def image(self) :
- return self._image
-
- @image.setter
- def image(self, fichier:str) :
- self._image = str(fichier)
-
- @property
- def bouton(self) :
- return self._bouton
-
- @bouton.setter
- def bouton (self, texte:str) :
- self._bouton = str(texte)
-
- @property
- def commande(self) :
- return self._commande.__name__
-
- @commande.setter
- def commande(self, commande) :
- if not callable(commande) :
- raise TypeError('La commande doit être un objet callable')
- self._commande = commande
-
- def afficher(self, image=True, commande=True) :
- self.title(self.titre)
- col = 1
- if image :
- import os.path
- if not os.path.isfile(self._image) :
- raise FileExistsError('Le fichier ' + str(self._image) + ' n\'existe pas.')
-
- import imghdr
- if imghdr.what(self._image) != 'gif' :
- raise TypeError('Le fichier ' + str(self._image) + ' n\'est pas une image de type gif')
-
- self._pimg = tk.PhotoImage(file=self._image)
- canevas = tk.Canvas(self, width=self._pimg.width(), height=self._pimg.height(), highlightthickness=0)
- canevas.create_image(0, 0, image=self._pimg, anchor=tk.NW)
- canevas.grid(row=1, column=col, padx=10, pady=10, sticky=tk.N)
- col += 1
- message = tk.Message(self, text=self.message, font=('', -14), aspect=100)
- message.grid(row=1, column=col, padx=10, pady=10)
-
- bouton = tk.Button(self, text=self._bouton, command=self._commande)
- bouton.grid(row=2, column=1, columnspan=col, pady=10)
- if __name__ == '__main__' :
- class Application(tk.Frame) :
- def __init__(self) :
- tk.Frame.__init__(self, width=400, height=400)
- self.grid()
- self.grid_propagate()
-
- self.master.title('Mon application')
- tk.Button(text='Hein ?', command=self.hein).grid()
-
- def hein(self) :
- info = Info(self)
- info.titre = 'Informations bizarres'
- 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 ...'
- info.bouton = 'Un faux ?'
- info.commande = self.master.destroy
- info.afficher()
- app = Application()
- 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.
|