Appel d'un Toplevel à partir d'un menu dans une class
Bonjour,c'est encore moi, je suis toujours sur windows 7/ Python 3.3 / Tkinter/ SQLIte.
J'ai fais un code simplifié pour expliquer ce que je souhaiterai faire.
A partir de ma fenêtre Interface, je souhaite ouvrir une nouvelle fenêtre dialogue.
Ceci de deux manières :
- soit avec un bouton, dans cette exemple "Hello". Pour ça il me semble avoir compris.
- soit à partir du menu crée dans la class Interface en cliquant sur "Ouvrir" du menu "Fichier". Et c'est là que, arg! Comment que je fais ?
J'ai crois avoir compris qu'à partir de la construction d'un objet il n'était pas possible d'appeler une fonction qui n'est pas connue.
Mais après, je suis un peu dans l'exercice de la brasse indienne, si vous voyez ce que je veux dire...
interface.py
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54
| ## Importation de fonctions externes :
from tkinter import *
from tkinter.messagebox import *
from dialogue import *
#####################################################################################
## Définition locale des classe et fonctions :
class Interface(Tk):
""" Interface de l'application avec la bese de données SQLite3 """
def __init__(self, parent, titre):
Tk.__init__(self, parent)
self.parent = parent
self.protocol("WM_DELETE_WINDOW", self.quitter)
self.title(titre)
self.initialise()
def initialise(self):
" définit les éléments graphique "
#------ Création barre Menus : Fichier, Outils, Aides ... -----
self.barMenu = Menu(self, tearoff = 0)
self.fichier = Menu(self.barMenu, tearoff = 0)
self.barMenu.add_cascade(label = "Fichier", underline = 0, menu = self.fichier)
self.fichier.add_command(label = "Ouvrir", underline = 0, command = self.ouvrir)
self.fichier.add_command(label = "Quitter", underline = 0, command = self.quitter)
self.config(menu = self.barMenu)
def ouvrir(self): pass
def quitter(self):
self.rep = askokcancel("Confirmation de fermeture", "Vous voulez quitter ?")
if self.rep:
self.destroy()
#####################################################################################
## Corps principal du programme
def popDialog():
d = Dialog(racine, titre = "Module d'essai", offx = 100, offy = 100)
def quitter():
q = Interface.quitter()
if __name__ == "__main__" :
racine = Interface(None, "Mon Application")
cadreRacine = Frame(racine)
cadreRacine.pack(padx = 150, pady =100)
Button(cadreRacine, text = "Hello", command = popDialog).pack(padx = 10, pady = 10)
racine.protocol("WM_DELETE_WINDOW", quitter)
racine.mainloop()
racine.destroy() |
dialogue.py
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
| #####################################################################################
## Importation de fonctions externes :
from tkinter import *
#####################################################################################
## Définition locale de classe et fonctions :
class Dialog(Toplevel):
""" Définit une fenêtre de dialogue """
def __init__(self, conteneur, titre = None, center = False, offx = 300, offy = 300):
Toplevel.__init__(self, conteneur)
self.conteneur = conteneur
self.protocol("WM_DELETE_WINDOW", self.annuler)
self.transient(conteneur)
#------ Titre hérité de Toplevel ------------------------
if titre :
self.title(titre)
self.initialise()
def initialise(self):
" Définit les éléments graphiques "
cadre = Frame(self, height = 200, width = 200)
cadre.pack(padx = 10, pady = 10)
def annuler(self):
self.destroy() |