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 :

taille canvas bibli TK entre fonction


Sujet :

Tkinter Python

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 29
    Points : 14
    Points
    14
    Par défaut taille canvas bibli TK entre fonction
    Bonjour

    J'ai un petit problème de présentation et ca m'agace car je suis sur que c'est pas grand chose

    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
     
     
    def inserer():
            # Création d'un widget Label (texte 'test')
            Label1 = Label(Canevas, text = 'test ')
            Label1.pack()
     
            # Création d'un widget Entry (champ de saisie)
           Test= StringVar()
            Champ = Entry(Canevas, textvariable= Test)
            Champ.focus_set()
            Champ.pack()
     
     
    # Main window
    Mafenetre = Tk()
    Mafenetre.title("test")
     
    # Création d'un widget Menu
    menubar = Menu(Mafenetre)
     
    menufichier = Menu(menubar,tearoff=0)
    menufichier.add_command(label="Insérer",command=inserer)
    menubar.add_cascade(label="Fichier", menu=menufichier)
     
    # Affichage du menu
    Mafenetre.config(menu=menubar)
     
    # Création d'un widget Canvas
    Canevas = Canvas(Mafenetre,width=500,height=500)
    Canevas.pack(padx=5,pady=5)
     
    # Utilisation d'un dictionnaire pour conserver une référence
    gifdict={}
     
    Mafenetre.mainloop()

    Le menu initial s'ouvre bien avec une taille de 500x500.
    Dès que je vais sur "insérer" et donc la fonction associée, il me reajuste la taille de canvas en fonction du champ a afficher. Or Je préferais garder la taille de 500x500 histoire que cela soit plus facile.

    J'ai essayé de faire un canvas.configure mais idem, il se repositionne autour des champs

    merci d'avance pour votre aide

  2. #2
    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.

    Définis un geometry à ta fenêtre.
    Mais définir un canvas comme parent des widgets créés dans ta fonction inserer n'est peut-être pas une bonne idée.
    Le temps ronge l'amour comme l'acide.

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 29
    Points : 14
    Points
    14
    Par défaut
    bonjour

    merci pour ton retour.

    Je n'ai rien contre faire évoluer le code

    Quelle serait la meilleure solution?

    Moi le seule principe que je souhaite c'est simplement que d'un menu a l'autre on garde la taille de la fenetre quitte a avoir un ascenseur vertical

    merci

  4. #4
    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 Florent42 Voir le message
    Dès que je vais sur "insérer" et donc la fonction associée, il me reajuste la taille de canvas en fonction du champ a afficher. Or Je préferais garder la taille de 500x500 histoire que cela soit plus facile.
    Par défaut, le contenant est redimensionné en fonction de la place occupée par les widgets qu'il contient.
    Pour changer ce défaut en appliquant .pack_propagate(False) au contenant.

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

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 29
    Points : 14
    Points
    14
    Par défaut
    bonjour

    Effectivement j'ai essayé et .pack_propagate(False) répond parfaitement a ce que je voulais faire
    merci

    Par contre j'ai un autre petit problème maintenant.

    Quand je vais dans mes menus j'affiche des bouton des Label etc.....et ils se concatène dans le canvas.

    je pensais que la commande Canevas.delete(ALL) en début de chaque fonction allait supprimer les items existants mais pas du tout.

    Y-a une autre manière de faire ?

    Également en faisant afficher une bonne série d'items, j'ai vu qu'au bout d'un moment les items débordaient du canvas et l'ascenseur n'apparaissait pas. Y a-t-il une possibilité de mettre cet ascenseur ?

    merci

  6. #6
    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
    Canvas.delete supprime des items créés avec les méthodes Canvas.create_*, et en cas d'identifiants inconnus, delete ne retourne pas d'erreur.

    Si tu n'as pas besoin de créer d'items canvas, alors c'est plus de frames dont tu aurais besoin comme conteneurs de widgets.
    Le temps ronge l'amour comme l'acide.

  7. #7
    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 Florent42 Voir le message
    je pensais que la commande Canevas.delete(ALL) en debut de chaque fonction allait supprimer les items existants mais pas du tout.

    Y a un autre a faire?
    Pour détruire un widget, c'est .destroy() qu'on doit lui appliquer.
    Et la liste des widgets "contenus" dans un "contenant" se récupère via <contenant>.pack_slaves().

    Egalement en faisant afficher une bonne serie d'item, j'ai vu qu'au bout d'un moment les item debordait du canvas et l'asenceur apparaissait pas. Y a t il une possibilité de mettre cet ascenseur?
    Ah ben non, c'est à vous de créer les Scrollbar, les faire apparaître,...
    Et si la question est d'avoir une Scrollbar sur un tas de widgets disparates, la technique est de les placer dans une Frame devenant item du Canvas.
    Pour les détails, vous avez des tas de codes en cherchant un peu sur Internet (c'est un peu compliqué).

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

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 29
    Points : 14
    Points
    14
    Par défaut
    bonjour

    Suite à vos conseils j'ai modifié la façon de faire et passé a des frames. Cela marche parfaitement, j'ai toujours la même taille de fenetre

    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
     
     
    class tst (Tk):
     
            def __init__(self):
                    # superclass inits
                    Tk.__init__(self)
                    # main window inits
                    self.title("test")
                    self.geometry("530x350")
                    self.resizable(width=False, height=False)
                    # widget inits
                    self.init_widget()
            # end def
     
            def init_widget (self):
                    "mise en place de l'interface GUI"
                    # init menu
                    self.init_menu()
                    # init mainframe - conteneur principal
                    self.mainframe = Frame(self)
                    self.mainframe.grid(row=0, column=0, sticky=NW+SE, padx=5, pady=5)
     
                    self.init_exploiter()
     
            def init_exploiter(self):
                    # init frame
                    _frame = self.frame_exploiter = Frame(self.mainframe)
                    # init notebook
                    _nbk = ttk.Notebook(_frame)
                    _nbk.pack(expand=1, fill=BOTH)
                    # init tab
                    _tab2 = ttk.Frame(_nbk, padding="10")
     
                    scroll = Scrollbar(_tab2)
                    scroll.pack(side = RIGHT,fill = Y)
     
     
                    _nbk.add(_tab2, text="Resultat", sticky=NW)
     
     
            def exploiter (self):
                    "lire bdd"
                    self.switch_to(self.frame_exploiter)
            # end def
     
     
            def switch_to (self, content):
                    "basculer vers un autre contenu"
                    for widget in self.mainframe.winfo_children():
                            widget.pack_forget()
                    # end for
                    # on affiche le nouveau contenu
                    content.pack(expand=1, fill=BOTH, in_=self.mainframe)
            # end def
     
     
     
     
    # end class tst
    if __name__ == "__main__":
     
        tst().mainloop()
     
    # end if

    Je reviens a mon pb de scrollbar
    Comment dans ma fonction intégrer le scrollbar vertical?

    merci d'avance

  9. #9
    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 Florent42 Voir le message
    Je reviens a mon pb de scrollbar
    Comment dans ma fonction intégrer le scrollbar vertical?
    Normalement, autres sujets = ouverture d'une autre discussion (sans oublier de clore les sujets résolus).
    Puis avant d'utiliser un widget, il faut regarder un peu ce qu'il y a dans les tutos:

    et si vous avez un soucis, postez du code qui montre que vous avez lu les tutos pour appliquer les consignes de base dans l'utilisation d'une Scrollbar.

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

Discussions similaires

  1. Réponses: 6
    Dernier message: 29/03/2007, 17h46
  2. Taille d'un tableau en fonction de la taille de la fenetre
    Par Cow-b dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 21/08/2006, 17h58
  3. Problème d'appels d'une variable entre fonctions
    Par julien.nasser dans le forum MFC
    Réponses: 12
    Dernier message: 26/04/2006, 09h23
  4. Passage de pointeurs entre fonctions
    Par mickael.be dans le forum Langage
    Réponses: 3
    Dernier message: 02/01/2006, 21h01
  5. transfert de valeurs entre fonctions js et asp
    Par ericmart dans le forum ASP
    Réponses: 5
    Dernier message: 10/03/2005, 16h18

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