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

Tkinter Python Discussion :

Ouvrir une autre fenêtre GUI depuis un bouton


Sujet :

Tkinter Python

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    323
    Détails du profil
    Informations personnelles :
    Localisation : Espagne

    Informations forums :
    Inscription : Juillet 2003
    Messages : 323
    Points : 112
    Points
    112
    Par défaut Ouvrir une autre fenêtre GUI depuis un bouton
    Salut !!!
    Voila je commence sous python et j'utilise tkinter pour faire l'interface graphique.
    Je suis un habitué de VB mais sous python je sais pas comment faire pour ouvrir une autre fenêtre GUI depuis un simple bouton.

    J'ai pour cela un fichier test.py
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    import sys
    import os
    import tkinter as tk
     
    root = tk.Tk()
     
    def helloCallBack():
        os.system('connect_mysql.py')
        #Keep_both_files_in_the_same_Folder
    b1=tk.Button(root, text="OUVRIR",bg="white",command=helloCallBack)
    b1.pack()
    root.mainloop()
    et un fichier connect_mysql.py
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    from tkinter import *
     
    root = Tk()
    w = Label(root, text="Hello World")
    w.pack()
    root.mainloop()
    Mais rien ne se passe, j'ai :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sh: connect_mysql.py: command not found
    Car je ne sais pas comment appeler cette fenêtre.

    Merci de votre aide.

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    323
    Détails du profil
    Informations personnelles :
    Localisation : Espagne

    Informations forums :
    Inscription : Juillet 2003
    Messages : 323
    Points : 112
    Points
    112
    Par défaut
    Ok je me réponds. Un autre point de vue est bienvenue!!!!!

    Au lieu d'avoir le fichier connect_mysql.py. On crée def helloCallBack.
    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
    import sys
    import os
    import tkinter as tk
    from tkinter import *
     
    root = tk.Tk()
     
    def helloCallBack():
        root.destroy()
        hello = tk.Tk()
        w = Label(hello, text="Hello World")
        w.pack()
        #hello.mainloop()
     
    b1=tk.Button(root, text="OUVRIR",bg="white",command=helloCallBack)
    #b1=tk.Button(root, text="OUVRIR",bg="white",command=helloCallBack)
    b1.pack()
    root.mainloop()
    Ainsi sur click button on referme l'autre fenêtre

  3. #3
    Membre confirmé

    Homme Profil pro
    Bidouilleur
    Inscrit en
    Avril 2016
    Messages
    721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Bidouilleur

    Informations forums :
    Inscription : Avril 2016
    Messages : 721
    Points : 503
    Points
    503
    Billets dans le blog
    1
    Par défaut
    Salut.

    os.system attend une commande système, mais de toute façon, ce n'est pas comme ça que l'on appelle un module python.

    Maintenant quel est le réel besoin ? Car on peut très bien garder la même fenêtre et basculer d'un contenu à un autre avec de simples frames, et afficher telle ou telle frame en jouant avec Frame.pack et Frame.pack_forget.
    Le temps ronge l'amour comme l'acide.

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    323
    Détails du profil
    Informations personnelles :
    Localisation : Espagne

    Informations forums :
    Inscription : Juillet 2003
    Messages : 323
    Points : 112
    Points
    112
    Par défaut
    Citation Envoyé par bistouille Voir le message
    Salut.

    os.system attend une commande système, mais de toute façon, ce n'est pas comme ça que l'on appelle un module python.

    Maintenant quel est le réel besoin ? Car on peut très bien garder la même fenêtre et basculer d'un contenu à un autre avec de simples frames, et afficher telle ou telle frame en jouant avec Frame.pack et Frame.pack_forget.
    Salut bistouille,
    Merci d'avoir répondu.

    J'ai commencer ce week-end sur python et je commence a apprendre a mon rythme.
    En effet tu as raison. Je me suis rendu compte que je pouvais avoir avoir tout mon code sur un seul fichier et ne pas "appeler" un autre.
    As tu un exemple avec Frame.pack et Frame.pack_forget ?
    Je vais me renseigner. A+

    EDIT:
    C'est comme ceci qu'on change d'une fenêtre a une autre correctement ???

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    from tkinter import *
    master = Tk()
    def helloCallBack():
        label = Label(frame, text="Hello World")
        label.pack()
        b1.pack_forget()
    frame = Frame(master, width=200, height=200)
    b1=Button(master,text="OUVRIR",bg="red",command=helloCallBack)
    b1.pack()
    frame.pack()
    master.mainloop()

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    323
    Détails du profil
    Informations personnelles :
    Localisation : Espagne

    Informations forums :
    Inscription : Juillet 2003
    Messages : 323
    Points : 112
    Points
    112
    Par défaut
    Finalement je trouve pas.

    J'ai ce code :

    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
    import tkinter
    import tkinter as tk
    from tkinter import *
    from tkinter import ttk
     
    def Create_DB():
        def select_db():
            v.get()
        def open_winform():
            if(v.get() == 1):
                print ("Local")
            elif(v.get() == 2):
                MYSQL_Form()
        create_db=Tk()
        create_db.title ('myAPP')
        v = IntVar()
        radio_1=Radiobutton(create_db, text="Create LOCAL DataBase", variable=v, value=1, command=select_db).pack(anchor=W)
        radio_2=Radiobutton(create_db, text="Create MYSQL Database", variable=v, value=2, command=select_db).pack(anchor=W)
        b1=Button(create_db, text="OUVRIR",bg="white",command=open_winform)
        b1.pack()
        create_db.mainloop()
     
     
    def MYSQL_Form():
        create_db.destroy()
        mysql_form = Tk()
        mysql_form.title ('myAPP - Create DataBase MYSQL')
        mysql_form.pack()
        b1.pack_forget()
     
    Create_DB()
    Mon explication:
    Create_DB() s'ouvre, en selectionnant radio2 et en cliquant sur le bouton il devrait ouvrir MYSQL_Form() et celui ci en se lancant devrait fermer Create_DB() grace a create_db.destroy(). Mais C'est pas le cas.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Traceback (most recent call last):
      File "C:\Python\Python35\lib\tkinter\__init__.py", line 1549, in __call__
        return self.func(*args)
      File "c:\Users\Javier\Documents\GitHub\myAPP \TEST_test.py", line 13, in open_winform
        MYSQL_Form()
      File "c:\Users\Javier\Documents\GitHub\myAPP \TEST_test.py", line 25, in MYSQL_Form
        create_db.destroy()
    NameError: name 'create_db' is not defined
    Donc je mi prend surement mal. Ou sinon comment faire pour fermer def Create_DB() en cliquant ?

  6. #6
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    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 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Salut,

    Citation Envoyé par superthx Voir le message
    Donc je mi prend surement mal. Ou sinon comment faire pour fermer def Create_DB() en cliquant ?
    Il faut apprendre ce qu'est la portée des variables avec Python.
    Et si vous vous lancez dans tkinter, savoir la différence entre Tk(), Toplevel() et Frame().

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

Discussions similaires

  1. GTK3+ en c : ouvrir une nouvelle fenêtre à l'appui du bouton
    Par ChrisEng dans le forum GTK+ avec C & C++
    Réponses: 1
    Dernier message: 16/07/2016, 22h08
  2. Ouvrir une autre base Access depuis VBA
    Par Elnino38 dans le forum VBA Access
    Réponses: 6
    Dernier message: 12/03/2015, 15h15
  3. Réponses: 7
    Dernier message: 18/05/2012, 16h20
  4. [AC-2003] Ouvrir une autre base depuis un bouton sur formulaire
    Par Bernard67 dans le forum VBA Access
    Réponses: 2
    Dernier message: 07/05/2009, 13h38
  5. Response.Write pour ouvrir une autre fenêtre
    Par PatStan17 dans le forum ASP.NET
    Réponses: 2
    Dernier message: 28/04/2009, 16h09

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