IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

Remplir par une fonction à partir d'une base de données Sqlite3 une Combobox


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de lagratteCchouette
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    200
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 200
    Par défaut Remplir par une fonction à partir d'une base de données Sqlite3 une Combobox
    Bonjour à tous,
    J'ai passé pas mal de temps à comprendre par moi-même, mais j'avoue que là je patine.
    Pourriez-vous s'il vous plaît m'aider à comprendre la logique des combobox et des fonctions.

    Je crée une BdD de citations tb_auteur et tb_citation. Une fois que j'ai créé les auteurs, je veux pouvoir en récupérant ceux-ci renseigner mon formulaire citation afin d'assigner à un même auteur plusieurs citations: Exemple Socrate a dit... pleins de choses.

    En utilisant la fonction def cmb_nomsauteur(): afi de nourrir ma combobox... je n'arrive pas à récupérer les données de ma table afin de nourrir cette liste et ensuite il me faudra récupérer par get() la valeur ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    # -*- coding: utf-8 -*-
    from tkinter import *
    import tkinter as tk
    from tkinter import font
    from PIL import Image, ImageTk # module image
     
    def cmb_nomsauteur():
            conn = sqlite3.connect("mnesis.db") # Spécifier le nom de votre base de données dans le même répertoire.
            noms = [] # Création d'une liste afin de récupérer les noms des auteurs
            for row in conn.execute('select auteur_auteur from tb_auteur;'): # Boucle afin de lire la database
                    data = row[0];
            noms.append(data) #Valeur de la variable contenant le contenu de la requête
            listenomsauteurSelect = StringVar()
            result = (noms)
            listenomsauteur = Combobox(fenetre_pce, textvariable = listenomsauteurSelect, values = result, state = 'readonly')
     
    fenetre_pce =Tk() # Fenêtre prinicpale
     
    labelCitation_Auteur = Label(fenetre_pce, text="Auteur",bg='lightblue3', font=("Arial", 12,"bold"))
    labelCitation_Auteur.place(x=30,y=38)
     
    cmb_nomsauteur.place(x=30,y=65)
     
    fenetre_pce.mainloop()
    J'ai le message d'erreur suivant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    [Running] python -u "c:\chemin\menesis_database_projet-03\frontend_test cmb.py"
    Traceback (most recent call last):
      File "c:\chemin\menesis_database_projet-03\frontend_test cmb.py", line 22, in <module>
        cmb_nomsauteur.place(x=30,y=65)
    AttributeError: 'function' object has no attribute 'place'


    Mais cela marche avec cela :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
     
    # -*- coding: utf-8 -*-
    from tkinter import *
    from tkinter.ttk import *
    import sqlite3
     
    fenetre_pce = Tk() # Le constructeur
    #=======================================================================
     
    conn = sqlite3.connect("mnesis.db") # Spécifier le nom de votre base de données dans le même répertoire.
    noms = [] # Création d'une liste afin de récupérer les noms des auteurs
    for row in conn.execute('select auteur_auteur from tb_auteur;'): # Boucle afin de lire la database
        data = row[0];
        noms.append(data) #Valeur de la variable contenant le contenu de la requête
     
    listenomsauteurSelect = StringVar()
    result = (noms)
    listenomsauteur = listecategorie = Combobox(fenetre_pce, textvariable = listenomsauteurSelect, values = result, state = 'readonly')
     
    #=======================================================================
    listenomsauteur.pack()
    fenetre_pce.geometry("300x300+120+120")
    fenetre_pce.mainloop()
    merci beaucoup par avance pour vos lumières...

  2. #2
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 743
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 743
    Par défaut
    Salut,

    Quand vous postez du code assurez vous qu'il n'y a que les erreurs qui concernent votre soucis et non ceux de copie/coller intempestifs.

    Là il y a plein de soucis aux lignes 9, 11, 18, ... vous codez mieux que çà!

    Pourriez-vous s'il vous plaît m'aider à comprendre la logique des combobox et des fonctions.
    C'est la même logique que pour n'importe quel autre widget. Alors si on a ni code qui illustre votre soucis ni une question explicite, les tutos sont là pour répondre à ce genre de question générique.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Membre confirmé Avatar de lagratteCchouette
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    200
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 200
    Par défaut Combobox
    Oui c'est vrai que c'est un code que j'ai récupéré et que j'essaie d'adapter.
    Mais où puis-j trouver le bonne façon de coder ma combobox avec une récupération de donnée dans une BdB Sqlite3 ?

    Parce que je n'ai pas trouvé... ou si vous pouvez m'aider en quelques idées après une fois que je commence à comprendre je me débrouille...
    OK je mets le code dans son intégralité pour mieux pouvoir m'expliquer et mon souci se passe à la ligne 83 et ma fonction def cmb_nomsauteur(): se trouve lignes 24 à 32

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
     
    # -*- coding: utf-8 -*-
     
    from tkinter import*
    import tkinter as tk
    from main_sql import*# syntaxe pour appeller un autre fichier py + fonction
    from tkinter import font
    from PIL import Image, ImageTk # module image
     
     
    classHoverButton(tk.Button):
    def__init__(self, master, **kw):
            tk.Button.__init__(self,master=master,**kw)
    self.defaultBackground =self["background"]
    self.bind("<Enter>", self.on_enter)
    self.bind("<Leave>", self.on_leave)
     
    defon_enter(self, e):
    self["background"] =self["activebackground"]
     
    defon_leave(self, e):
    self["background"] =self.defaultBackground
     
     
    defcmb_nomsauteur():
            conn = sqlite3.connect("mnesis.db") # Spécifier le nom de votre base de données dans le même répertoire.
            noms = [] # Création d'une liste afin de récupérer les noms des auteurs
    for row in conn.execute('select auteur_auteur from tb_auteur;'): # Boucle afin de lire la database
                    data = row[0];
            noms.append(data) #Valeur de la variable contenant le contenu de la requête
            listenomsauteurSelect = StringVar()
            result = (noms)
            listenomsauteur = Combobox(fenetre_pce, textvariable= listenomsauteurSelect, values= result, state='readonly')
     
     
    defrunauteur():
    global boutonEnregistrer
        toplevelAuteur = Toplevel()  #== Contructeur Toplevel ==
        toplevelAuteur.title(" Bienvenue dans la saisie des auteurs")
        screen_x =int(toplevelAuteur.winfo_screenwidth())
        screen_y =int(toplevelAuteur.winfo_screenheight())
        toplevelAuteur_x =1260
        toplevelAuteur_y =720
        pos_x = (screen_x //2) - (toplevelAuteur_x //2)
        pos_y = (screen_y //2) - (toplevelAuteur_y //2)
        geo ="{}x{}+{}+{}".format(toplevelAuteur_x, toplevelAuteur_y, pos_x, pos_y)
        toplevelAuteur.geometry(geo)
        toplevelAuteur.resizable(width=False,height=False) # Fenêtre modifiable True or False
        toplevelAuteur.configure(bg='Gray79')
        labelAuteur = Label(toplevelAuteur, text="Auteur",bg='Gray79', font=("Arial", 12,"bold"))
        labelAuteur.place(x=30,y=38)
        entreeAuteur = Entry (toplevelAuteur, width="50",font=("Arial", 12,"bold"))
        entreeAuteur.place(x=30,y=65)
        labelInfo = Label(toplevelAuteur, text="Information",bg='Gray79', font=("Arial", 12,"bold"))
        labelInfo.place(x=30,y=100)
        entreeInfo = Text(toplevelAuteur, width="149", height="30")
        entreeInfo.place(x=30,y=127)
        boutonEnregistrer = HoverButton(toplevelAuteur, text='Enregistrer', activebackground="SkyBlue1", command=lambda : enregisterAuteur(entreeAuteur.get(), entreeInfo.get('1.0', END)))  
        boutonEnregistrer.pack(side=BOTTOM, anchor=SE, padx=20, pady=20) #boutonEnregistrer.place(x=700,y=400)
     
     
    defruncitation():
    global boutonEnregistrer
        toplevelCitation = Toplevel()  #== Contructeur Toplevel ==
        toplevelCitation.title(" Bienvenue dans la saisie des citations")
        screen_x =int(toplevelCitation.winfo_screenwidth())
        screen_y =int(toplevelCitation.winfo_screenheight())
        toplevelCitation_x =1260
        toplevelCitation_y =720
        pos_x = (screen_x //2) - (toplevelCitation_x //2)
        pos_y = (screen_y //2) - (toplevelCitation_y //2)
        geo ="{}x{}+{}+{}".format(toplevelCitation_x, toplevelCitation_y, pos_x, pos_y)
        toplevelCitation.geometry(geo)
        toplevelCitation.resizable(width=False,height=False) # Fenêtre modifiable True or False
        toplevelCitation.configure(bg='lightblue3')
     
        labelCitation_Auteur = Label(toplevelCitation, text="Auteur",bg='lightblue3', font=("Arial", 12,"bold"))
        labelCitation_Auteur.place(x=30,y=38)
     
    # C'est là mon souci  
        labelCitation_Auteur = Label(toplevelCitation, text="Auteur",bg='lightblue3', font=("Arial", 12,"bold"))
        labelCitation_Auteur.place(x=30,y=38)
    # Et là aussi
        cmb_nomsauteur.place(x=30,y=65)
     
        labelCitation = Label(toplevelCitation, text="Citation",bg='lightblue3', font=("Arial", 12,"bold"))
        labelCitation.place(x=30,y=100)
        entreeCitation = Text(toplevelCitation, width="149", height="28")
        entreeCitation.place(x=30,y=127)
        labelReference = Label(toplevelCitation, text="Référence",bg='lightblue3', font=("Arial", 12,"bold"))
        labelReference.place(x=30,y=593)
        entreeReference = Text(toplevelCitation, width="149", height="1")
        entreeReference.place(x=30,y=620)
    # get => thetext = text.get ('1.0', 'end') clea veut de la 1ère à 'end' la fin de la dernière ligne
        boutonEnregistrer_citation = Button(toplevelCitation, text='Enregistrer', command=lambda : enregisterCitation(entreeCitation_Auteur.get(), entreeCitation.get('1.0', END), entreeReference.get('1.0', END)))
        boutonEnregistrer_citation.pack(side=BOTTOM, anchor=SE, padx=20, pady=20) 
     
    #================== Création de la fénêtre principale ================
    fenetre_pce =Tk() # Fenêtre prinicpale
    fenetre_pce.title("Menesis... se souvenir !")
    screen_x =int(fenetre_pce.winfo_screenwidth())   # Fonction centrer fenêtre
    screen_y =int(fenetre_pce.winfo_screenheight())
    fenetre_pce_x =1600
    fenetre_pce_y =900
    pos_x = (screen_x //2) - (fenetre_pce_x //2)
    pos_y = (screen_y //2) - (fenetre_pce_y //2)
    geo ="{}x{}+{}+{}".format(fenetre_pce_x, fenetre_pce_y, pos_x, pos_y)   # Attention le 1er facteur est x ensuite +
    fenetre_pce.geometry(geo)
    fenetre_pce.resizable(width=False,height=False) # Fenêtre modifiable True or False
    fenetre_pce.iconbitmap("img/search.ico") ### Changement de l'icone de la fenêtre [l'icone doit être placé dans le répertoire racine de l'application ou un autre répertoire img/...]
     
    #=================== Création d'un menu ==============================
    menubar = Menu(fenetre_pce,borderwidth=20, relief=GROOVE) # Création de la FRAME pour placer les menus dans le constructeur  ==> fenetre =Tk() 
    menuFichier = Menu(menubar, tearoff=0) # Création du menu "Fichier"
    menubar.add_cascade(label="Fichier", menu=menuFichier) # Rattachement des commandes au menu "Fichier"
    menuFichier.add_command(label="Créer")
    menuFichier.add_command(label="Ouvrir",)
    menuFichier.add_command(label="Editer")
    menuFichier.add_separator() # Ligne de séparation
    menuFichier.add_command(label="Quitter", command=fenetre_pce.quit)
     
    menuEdition = Menu(menubar, tearoff=0)
    menubar.add_cascade(label="Edition", menu=menuEdition)
    menuEdition.add_command(label="Couper")
    menuEdition.add_command(label="Copier")
    menuEdition.add_command(label="Coller")
    menuEdition.add_command(label="Créer")
     
    menuAuteur = Menu(menubar, tearoff=0)
    menubar.add_cascade(label="Auteur", menu=menuAuteur)
    menuAuteur.add_command(label="Créer", command=runauteur)
    menuAuteur.add_command(label="Consulter")
     
    menuCitation = Menu(menubar, tearoff=0)
    menubar.add_cascade(label="Citation", menu=menuCitation)
    menuCitation.add_command(label="Créer", command=runcitation)
    menuCitation.add_command(label="Consulter")
     
    menuAide = Menu(menubar, tearoff=0)
    menubar.add_cascade(label="Aide", menu=menuAide)
    menuAide.add_command(label="A propos") 
     
    fenetre_pce.config(menu=menubar) # Configuration et print menu
    #----------------------------------------------------------------
    #Citation accueil
    labelcitation1 = Label(fenetre_pce, text="'Le souvenir est le parfum de l'âme' - Georges Sand", font=("Arial", 14,"bold")).pack()
    # Fond d'écram accueil
    frontimage = ImageTk.PhotoImage(Image.open("img/connaissance_1600-900.jpg") ) # image de fond page d'accueil
    frontimagelabel = Label(fenetre_pce, image=frontimage).pack(expand=1)
     
     
     
    #== Fermeture de la boucle principale ==
    fenetre_pce.mainloop() # Boucle principale
    Et les messages d'erreurs avec ce code complet ci-dessous :

    Exception in Tkinter callback
    Traceback (most recent call last):
    File "C:\Users\xxxxxxx\AppData\Local\Programs\Python\Python37\lib\tkinter\__init__.py", line 1705, in __call__

    return self.func(*args)

    File "c:\xxxxxxx\menesis_database_projet-03\frontend.py", line 83, in runcitation

    cmb_nomsauteur.place(x=30,y=65)
    AttributeError: 'function' object has no attribute 'place'



  4. #4
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 743
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 743
    Par défaut
    Les codes que vous avez posté sont toujours aussi truffés d'erreurs de syntaxe, d'indentation,...

    cmb_nomsauteur.place(x=30,y=65)
    AttributeError: 'function' object has no attribute 'place'
    Le message d'erreur vous dit juste qu'une fonction n'est pas un widget et... qu'il n'a pas de méthode .place (ni .pack, ni .grid).

    ou si vous pouvez m'aider en quelques idées après une fois que je commence à comprendre je me débrouille...
    Pour comprendre il faut "simplifier" en vous concentrant sur le dialogue entre l'utilisateur et l'interface.
    Vous récupérez depuis la base de données une liste de chaîne de caractères.
    SI vous voulez faire "simple", un Button qui appelle une fonction lorsqu'on appuie dessus et qui affiche une combobox avec A, B, C, D dedans est un bon début.
    Puis comme, à priori, lorsque l'utilisateur en sélectionnera une dans la combobox, il faudra lancer une opération. Il va falloir apprendre à faire fonctionner çà.

    Une fois que vous aurez compris comment çà fonctionne sur un petit exemple vous pourrez mettre à jour votre code.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  5. #5
    Membre confirmé Avatar de lagratteCchouette
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    200
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 200
    Par défaut A voir
    Merci je regarde.

  6. #6
    Membre confirmé Avatar de lagratteCchouette
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    200
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 200
    Par défaut TypeError: cmb_nomsauteur() takes 0 positional arguments but 1 was given
    Bonjour,
    Après avoir eu mal à la tête et merci pour les pistes que vous m'avez donné.
    Voilà à ce stade de mon développement cela marche, mais alors que j'enregistre bien les données dans ma base Sqlite3, j'ai quand même un message...
    Et là... pas d'idée après avoir cherché...

    Ma commande combobox se trouve lignes 79 à 81 et ma fonction lignes 25 à 32.
    Merci beaucoup par avance pour votre aide.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Exception in Tkinter callback
    Traceback (most recent call last):
      File "C:\Users\xxxxxx\AppData\Local\Programs\Python\Python37\lib\tkinter\__init__.py", line 1705, in __call__
        return self.func(*args)
    TypeError: cmb_nomsauteur() takes 0 positional arguments but 1 was given

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    # -*- coding: utf-8 -*-
     
    from tkinter import*
    import tkinter as tk
    import tkinter.ttk as ttk
    from main_sql import*# syntaxe pour appeller un autre fichier py + fonction
    from tkinter import font
    from PIL import Image, ImageTk # module image
     
     
    classHoverButton(tk.Button):
    def__init__(self, master, **kw):
            tk.Button.__init__(self,master=master,**kw)
    self.defaultBackground =self["background"]
    self.bind("<Enter>", self.on_enter)
    self.bind("<Leave>", self.on_leave)
     
    defon_enter(self, e):
    self["background"] =self["activebackground"]
     
    defon_leave(self, e):
    self["background"] =self.defaultBackground
     
     
    defcmb_nomsauteur():
        connexion = sqlite3.connect('mnesis.db')
        cursor = connexion.cursor()
        cursor.execute('SELECT auteur_auteur FROM tb_auteur')
        data = []
        for row in cursor.fetchall():
            data.append(row[0])
        return data
     
     
    defrunauteur():
    global boutonEnregistrer
        toplevelAuteur = Toplevel()  #== Contructeur Toplevel ==
        toplevelAuteur.title(" Bienvenue dans la saisie des auteurs")
        screen_x =int(toplevelAuteur.winfo_screenwidth())
        screen_y =int(toplevelAuteur.winfo_screenheight())
        toplevelAuteur_x =1260
        toplevelAuteur_y =720
        pos_x = (screen_x //2) - (toplevelAuteur_x //2)
        pos_y = (screen_y //2) - (toplevelAuteur_y //2)
        geo ="{}x{}+{}+{}".format(toplevelAuteur_x, toplevelAuteur_y, pos_x, pos_y)
        toplevelAuteur.geometry(geo)
        toplevelAuteur.resizable(width=False,height=False) # Fenêtre modifiable True or False
        toplevelAuteur.configure(bg='Gray79')
        labelAuteur = Label(toplevelAuteur, text="Auteur",bg='Gray79', font=("Arial", 12,"bold"))
        labelAuteur.place(x=30,y=38)
        entreeAuteur = Entry (toplevelAuteur, width="50",font=("Arial", 12,"bold"))
        entreeAuteur.place(x=30,y=65)
        labelInfo = Label(toplevelAuteur, text="Information",bg='Gray79', font=("Arial", 12,"bold"))
        labelInfo.place(x=30,y=100)
        entreeInfo = Text(toplevelAuteur, width="149", height="30")
        entreeInfo.place(x=30,y=127)
        boutonEnregistrer = HoverButton(toplevelAuteur, text='Enregistrer', activebackground="SkyBlue1", command=lambda : enregisterAuteur(entreeAuteur.get(), entreeInfo.get('1.0', END)))  
        boutonEnregistrer.pack(side=BOTTOM, anchor=SE, padx=20, pady=20) #boutonEnregistrer.place(x=700,y=400)
     
     
    defruncitation():
    global boutonEnregistrer
        toplevelCitation = Toplevel()  #== Contructeur Toplevel ==
        toplevelCitation.title(" Bienvenue dans la saisie des citations")
        screen_x =int(toplevelCitation.winfo_screenwidth())
        screen_y =int(toplevelCitation.winfo_screenheight())
        toplevelCitation_x =1260
        toplevelCitation_y =720
        pos_x = (screen_x //2) - (toplevelCitation_x //2)
        pos_y = (screen_y //2) - (toplevelCitation_y //2)
        geo ="{}x{}+{}+{}".format(toplevelCitation_x, toplevelCitation_y, pos_x, pos_y)
        toplevelCitation.geometry(geo)
        toplevelCitation.resizable(width=False,height=False) # Fenêtre modifiable True or False
        toplevelCitation.configure(bg='lightblue3')
    #---
        labelCitation_Auteur = Label(toplevelCitation, text="Auteur",bg='lightblue3', font=("Arial", 12,"bold"))
        labelCitation_Auteur.place(x=30,y=38)
    # Combobox noms des auteurs     
        combobox = ttk.Combobox(toplevelCitation, values=cmb_nomsauteur(), width=35, font=("Arial", 14,"bold")) # Récupération des valeurs de la fonction def cmb_nomsauteur():
        combobox.bind('<<ComboboxSelected>>', cmb_nomsauteur)
        combobox.place(x=30,y=65)
    #------------       
        labelCitation = Label(toplevelCitation, text="Citation",bg='lightblue3', font=("Arial", 12,"bold"))
        labelCitation.place(x=30,y=100)
        entreeCitation = Text(toplevelCitation, width="149", height="28")
        entreeCitation.place(x=30,y=127)
        labelReference = Label(toplevelCitation, text="Référence",bg='lightblue3', font=("Arial", 12,"bold"))
        labelReference.place(x=30,y=593)
        entreeReference = Text(toplevelCitation, width="149", height="1")
        entreeReference.place(x=30,y=620)
    # get => thetext = text.get ('1.0', 'end') clea veut de la 1ère à 'end' la fin de la dernière ligne
        boutonEnregistrer_citation = Button(toplevelCitation, text='Enregistrer', command=lambda : enregisterCitation(combobox.get(), entreeCitation.get('1.0', END), entreeReference.get('1.0', END)))
        boutonEnregistrer_citation.pack(side=BOTTOM, anchor=SE, padx=20, pady=20) 
     
    #================== Création de la fénêtre principale ================
    fenetre_pce =Tk() # Fenêtre prinicpale
    fenetre_pce.title("Menesis... se souvenir !")
    screen_x =int(fenetre_pce.winfo_screenwidth())   # Fonction centrer fenêtre
    screen_y =int(fenetre_pce.winfo_screenheight())
    fenetre_pce_x =1600
    fenetre_pce_y =900
    pos_x = (screen_x //2) - (fenetre_pce_x //2)
    pos_y = (screen_y //2) - (fenetre_pce_y //2)
    geo ="{}x{}+{}+{}".format(fenetre_pce_x, fenetre_pce_y, pos_x, pos_y)   # Attention le 1er facteur est x ensuite +
    fenetre_pce.geometry(geo)
    fenetre_pce.resizable(width=False,height=False) # Fenêtre modifiable True or False
    fenetre_pce.iconbitmap("img/search.ico") ### Changement de l'icone de la fenêtre [l'icone doit être placé dans le répertoire racine de l'application ou un autre répertoire img/...]
     
    #=================== Création d'un menu ==============================
    menubar = Menu(fenetre_pce,borderwidth=20, relief=GROOVE) # Création de la FRAME pour placer les menus dans le constructeur  ==> fenetre =Tk() 
    menuFichier = Menu(menubar, tearoff=0) # Création du menu "Fichier"
    menubar.add_cascade(label="Fichier", menu=menuFichier) # Rattachement des commandes au menu "Fichier"
    menuFichier.add_command(label="Créer")
    menuFichier.add_command(label="Ouvrir",)
    menuFichier.add_command(label="Editer")
    menuFichier.add_separator() # Ligne de séparation
    menuFichier.add_command(label="Quitter", command=fenetre_pce.quit)
     
    menuEdition = Menu(menubar, tearoff=0)
    menubar.add_cascade(label="Edition", menu=menuEdition)
    menuEdition.add_command(label="Couper")
    menuEdition.add_command(label="Copier")
    menuEdition.add_command(label="Coller")
    menuEdition.add_command(label="Créer")
     
    menuAuteur = Menu(menubar, tearoff=0)
    menubar.add_cascade(label="Auteur", menu=menuAuteur)
    menuAuteur.add_command(label="Créer", command=runauteur)
    menuAuteur.add_command(label="Consulter")
     
    menuCitation = Menu(menubar, tearoff=0)
    menubar.add_cascade(label="Citation", menu=menuCitation)
    menuCitation.add_command(label="Créer", command=runcitation)
    menuCitation.add_command(label="Consulter")
     
    menuAide = Menu(menubar, tearoff=0)
    menubar.add_cascade(label="Aide", menu=menuAide)
    menuAide.add_command(label="A propos") 
     
    fenetre_pce.config(menu=menubar) # Configuration et print menu
    #----------------------------------------------------------------
    #Citation accueil
    labelcitation1 = Label(fenetre_pce, text="'Le souvenir est le parfum de l'âme' - Georges Sand", font=("Arial", 14,"bold")).pack()
    # Fond d'écram accueil
    frontimage = ImageTk.PhotoImage(Image.open("img/connaissance_1600-900.jpg") ) # image de fond page d'accueil
    frontimagelabel = Label(fenetre_pce, image=frontimage).pack(expand=1)
     
    #== Fermeture de la boucle principale ==
    fenetre_pce.mainloop() # Boucle principale

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 1
    Dernier message: 18/02/2015, 14h52
  2. Réponses: 27
    Dernier message: 27/10/2013, 10h25
  3. Remplir une JTable à partir de la base de données
    Par L'aigle de Carthage dans le forum Composants
    Réponses: 1
    Dernier message: 13/03/2012, 17h28
  4. [MySQL] Afficher une image à partir stockée en base de données
    Par arti2004 dans le forum PHP & Base de données
    Réponses: 22
    Dernier message: 21/06/2011, 19h40
  5. [MySQL] Afficher une photo à partir de la base de données
    Par microcongo dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 07/09/2005, 17h29

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo