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

GUI Python Discussion :

Définir une fenêtre en dehors d'une classe qui utilise cette fenêtre


Sujet :

GUI Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau candidat au Club
    Femme Profil pro
    étudiant
    Inscrit en
    Mars 2017
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 26
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : étudiant

    Informations forums :
    Inscription : Mars 2017
    Messages : 2
    Par défaut Définir une fenêtre en dehors d'une classe qui utilise cette fenêtre
    Bonjours, J'aimerai faire un programme qui m'afficherait un pourcentage dans une fenetre tkinter et qui pourrait s'actualiser dans un intervalle temps. J'ai réussi à afficher ce que je veux (en partant d'un programme déjà existant) mais je suis obligée de l'afficher dans une nouvelle fenêtre. Je ne sais pas comment appeler la fenêtre dans la classe pour ne pas avoir à ouvrir à chaque fois une nouvelle fenêtre.
    J'ai voulu essayer en appelant ma fenêtre par "global" mais Python me dit alors que la variable correspondant à la fenêtre n'est pas définie.


    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
    from tkinter import*    
     
    # The graphical interface
    class Tkhanoi:
     
        # Create our objects
        def __init__(self, n, bitmap = None):
            self.n = n
            self.tk = tk = Tk()
            self.canvas = c = Canvas(tk)
            c.pack()
            width, height = tk.getint(c['width']), tk.getint(c['height'])
     
            # Add background bitmap
            if bitmap:
                self.bitmap = c.create_bitmap(width//2, height//2,
                                              bitmap=bitmap,
                                              foreground='blue')
     
            # Generate pegs (pince à linge)
            pegwidth = 10
            pegheight = height//2
            pegdist = width//1
            x1, y1 = (pegdist-pegwidth)//2, height*1//3
            x2, y2 = x1+pegwidth, y1+pegheight
            self.pegs = []
            p = c.create_rectangle(x1, y1, x2, y2, fill='white')
            self.pegs.append(p)
            self.tk.update()
     
            # Generate pieces
            pieceheight = pegheight//32  #épaisseur des carrés 
            maxpiecewidth = pegdist*2//3
            minpiecewidth = 2*pegwidth
            self.pegstate = [[], [], []]
            self.pieces = {}
            x1, y1 = x1, y2-pieceheight-2 #<- taille de la barre adroite
            x2, y2 = x2, y1+pieceheight   #<-taille de la barre à gauche
            dx = (maxpiecewidth-minpiecewidth) // (2*max(1, n-1))
            for i in range(n, 0, -1):
                p = c.create_rectangle(x1, y1, x2, y2, fill='red')
                self.pieces[i] = p
                self.pegstate[0].append(i)
                x1, x2 = x1, x2
                y1, y2 = y1 - pieceheight-2, y2-pieceheight-2
                self.tk.update()
                self.tk.after(25)
     
     
        # Reporting callback for the actual hanoi function
        def report(self, i, a, b):
            if self.pegstate[a][-1] != i: raise RuntimeError # Assertion
            del self.pegstate[a][-1]
            p = self.pieces[i]
            c = self.canvas
     
            # Lift the piece above peg a
            ax1, ay1, ax2, ay2 = c.bbox(self.pegs[a])
            while 1:
                x1, y1, x2, y2 = c.bbox(p)
                self.tk.update()
     
     
            # Move it towards peg b
            bx1, by1, bx2, by2 = c.bbox(self.pegs[b])
            newcenter = (bx1+bx2)//2
            while 1:
                x1, y1, x2, y2 = c.bbox(p)
                center = (x1 + x2)//2
                self.tk.update()
     
            # Move it down on top of the previous piece
            pieceheight = y2-y1
            newbottom = by2 - pieceheight*len(self.pegstate[b]) - 2
            while 1:
                x1, y1, x2, y2 = c.bbox(p)
                self.tk.update()
     
            # Update peg state
            self.pegstate[b].append(i)
     
     
     
     
    def main():
        import sys
        n = int(input("Donnez un nombre entre 1 et 10 : "))
     
        if sys.argv[2:]:
            bitmap = sys.argv[2]
            if bitmap[0] == '@': bitmap = bitmap[1:]
            else: bitmap = '@' + bitmap
        else:
            bitmap = None
     
        h = Tkhanoi(n, bitmap)
     
     
     
     
    if __name__ == '__main__':
        a = int(input( "Rentrez un nombre entre 1 et 10 : "))
        while a != 0:
            main()
            a = a - 1
    Merci d'avance ^^

  2. #2
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 790
    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 790
    Par défaut
    Citation Envoyé par elriman Voir le message
    Je ne sais pas comment appeler la fenêtre dans la classe pour ne pas avoir à ouvrir à chaque fois une nouvelle fenêtre.
    J'ai voulu essayer en appelant ma fenêtre par "global" mais Python me dit alors que la variable correspondant à la fenêtre n'est pas définie.
    Une interface graphique ne se programme pas comme on veut mais en suivant certaines règles qui sont loin d'être intuitives.
    Une construction simple comme:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
        a = int(input( "Rentrez un nombre entre 1 et 10 : "))
        while a != 0:
            main()
            a = a - 1
    n'est plus possible (ou plutôt difficile à faire fonctionner si vous ne maîtrisez pas les interfaces graphiques).
    Et pour apprendre à penser votre code en utilisant une telle bibliothèque, il faut ouvrir un tuto. et y passer un peu de temps pour essayez de comprendre.

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

  3. #3
    Nouveau candidat au Club
    Femme Profil pro
    étudiant
    Inscrit en
    Mars 2017
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 26
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : étudiant

    Informations forums :
    Inscription : Mars 2017
    Messages : 2
    Par défaut
    Merci pour la réponse et le lien.
    Je vais voir si je peux peut être mieux construire le programme avec ces règles.
    Encore merci

Discussions similaires

  1. Utilisation d'une variable en dehors de la classe main
    Par snyler dans le forum AWT/Swing
    Réponses: 8
    Dernier message: 27/01/2015, 15h32
  2. Réponses: 1
    Dernier message: 03/02/2012, 03h00
  3. définition du corps d'une méthode en dehors de la classe
    Par Adorien dans le forum Général Java
    Réponses: 4
    Dernier message: 26/02/2010, 09h56
  4. problème d'affichage du résultat dans une classe qui utilise SNMP
    Par ramzouni dans le forum Débuter avec Java
    Réponses: 0
    Dernier message: 22/05/2009, 02h26
  5. Réponses: 7
    Dernier message: 19/03/2007, 21h25

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