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 :

comment faire pour pouvoir colorier la barre de titre d'une fenêtre tkinter


Sujet :

Tkinter Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Homme Profil pro
    Webmaster
    Inscrit en
    Mai 2015
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Mai 2015
    Messages : 4
    Par défaut comment faire pour pouvoir colorier la barre de titre d'une fenêtre tkinter
    comment puis-je faire pour colorier le fonds de la barre de titre de ma fenetre principale ?
    j'ai l'impression qu'elle a la couleur système des fenêtres..
    il s'agit de l'espace au dessus de la barre de menus que j'ai créé et que j'arrive à colorier en vert...
    j'aimerai que cela puisse se faire aussi bien pour un utilisateur "linux" que "windows"
    je suis sur linux mint
    je commence tout juste à apprendre python 3.5 et je trouvais plus sympa de commencer par tkinter pour faire d'abord du visuel avant de rentrer dans la programmation davantage python.

    Merci déjà par avance pour avoir pris le temps de lire ce message...

    voici mon fichier fonctions qui me sert à appeler les différentes fonctions pour faire fonctionner mon programme:

    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
    #!/usr/bin/python2.7
    #-*- coding: utf-8 -*-
     
    """ on appelle le module tkinter de Python 3.5 pour utiliser les éléments de ce module. On importe Tkinter depuis la bibliothèque """
    from tkinter import *
    from tkinter import messagebox
     
    def creation_fenetre():
        """ on détermine la variable fenetre comme une variable globale pouvanat être
            prise en compte partout ailleurs dans le programme """
        global fenetre
        """ on crée  une instanciation de la fenêtre en prenant une partie de l'objet
            Tk() """
        fenetre = Tk()
        """ on détermine la resolution de l'ecran de l'ordinateur sur lequel on est,
            après avoir rendu la variable 'globale' pour qu'elle puisse être vue par
            les autres parties du programmes lorsqu'elle est appelée dans le fichier
            extérieur"""
        global w
        w = fenetre.winfo_screenwidth()
        global h
        h = fenetre.winfo_screenheight()
        """ on determine le % de l'ecran utilisé par la fenetre """
        global pourcent
        pourcent = 0.80
        """ on colore le fond de la fenetre en orange"""
        fenetre['bg']='orange'    
        """ on affecte les dimensions de l'ecran pour ouvrir la fenetre à x%(variable pourcent) du plein ecran """
        fenetre.geometry("%dx%d+0+0" % (w*pourcent, h*pourcent))
        """ on donne un titre à la fenetre """
        fenetre.title("Jus d'orange")  # titre de la fenetre
        """ autorisation du déplacement de la fenetre par l'utilisateur """
        fenetre.positionfrom("user")      # placement manuel de la fenetre possible avec la souris
        """ autorisation du redimensionnement de la fenetre par l'utilisateur """
        fenetre.sizefrom("user")          # dimensionnement manuel de la fenetre possible
        """ on determine la possibilité de détruire la fenetre """
        fenetre.protocol("WM_DELETE_WINDOW", fenetre.destroy) # evenement WM
     
    def ajout_bouton_quitter():
        """ on ajoute un bouton quitter """
        Bouton = Button(fenetre,text="Fermer la fenetre",fg='navy',command=fenetre.destroy)
        """ on permet de voir le bouton """
        Bouton.pack()
        """ on place le Button en bas à droite de la fenêtre par la méthode place() """
        Bouton.place(x=w*pourcent-140, y=h*pourcent-30)
     
    def ajout_champ_label001():
        global texte001
        texte001 = "Bonjour !"
        # On crée un label (ligne de texte) souhaitant la bienvenue
        # Note : le premier paramètre passé au constructeur de Label est notre
        # interface racine
        champ_label001 = Label(fenetre, text= texte001) # text est l'option représentant le texte affiché par le label
     
        # On affiche le label dans la fenêtre par la méthode pack
        # les boutons, champs de texte, cases à cocher, barres de progression etc... sont appelés widgets
        champ_label001.pack()
        """ on place le champ_label en haut au centre de la fenêtre par la méthode place() """
        champ_label001.place(x=(w*pourcent/2), y=h*pourcent-(h-260))
     
    def ajout_champ_label002():
        global texte002
        texte002 = "Avant de commencer, je vais te raconter une longue histoire ..................................................................................Re-Bonjour !"
        # On crée un label (ligne de texte) contenant le texte
        # Note : le premier paramètre passé au constructeur de Label est notre
        # interface racine
        champ_label002 = Label(fenetre, text= texte002) # text est l'option représentant le texte affiché par le label
     
        # On affiche le label dans la fenêtre par la méthode pack
        # les boutons, champs de texte, cases à cocher, barres de progression etc... sont appelés widgets
        champ_label002.pack()
        """ on place le champ_label en haut au centre de la fenêtre par la méthode place() """
        champ_label002.place(x=(w*pourcent/100), y=h*pourcent-(h-280))
     
    def ajout_champ_label003():
        global texte003
        texte003 = "et voila une troisième histoire ..................................................................................Re-Bonjour !"
        # On crée un label (ligne de texte) contenant le texte
        # Note : le premier paramètre passé au constructeur de Label est notre
        # interface racine
        # ensuite vient le texte qui sera écrit dans la zone etiquette
        # puis l'écart par rapport aux bords de l'etiquette ( padx: Marge horizontale entre les bords du widget et son contenu. pady: Marge verticale entre les bords du widget et son contenu 
        # foreground:couleur de l'écriture
        # background: couleur du fond
        # borderwidth: epaisseur de la bordure
        # relief = relief de la bordure : flat (plat) - raised(ressort vers extérieur) - sunken (enfoncé) - groove (triat en creux) - ridge (trait en relief)
        # height – Hauteur de l’étiquette en nombre de lignes (non en pixels). Si cette option n’est pas précisée, l’étiquette s’ajuste à son contenu.
        # width – Largeur de l’étiquette exprimée en nombre de caractères (non en pixels). Si cette option n’est pas précisée, l’étiquette s’ajuste à son contenu.
        champ_label003 = Label(fenetre, text= texte003, padx="0", pady="4", foreground="#892222", background="#FFAAAA", borderwidth= 5, relief= "ridge", height= 10, width= 80) # text est l'option représentant le texte affiché par le label
     
        # On affiche le label dans la fenêtre par la méthode pack
        # les boutons, champs de texte, cases à cocher, barres de progression etc... sont appelés widgets
        champ_label003.pack()
        """ on place le champ_label en haut au centre de la fenêtre par la méthode place() """
        champ_label003.place(x=(w*pourcent/100), y=h*pourcent-(h-480))    
     
    # fin de la fonction creation_fenetre()
    def boucle_fenetre():
        """ on crée la boucle infinie qui teste si une touche ou un clic de souris etc... a lieu pour déclencher un évènement prédéfini auparavant """
        fenetre.mainloop()
     
    # création menu pour fenêtre
    # def barre_de_menus():
    def alert1():
       messagebox.showinfo("menu1", "c'est le résultat de menu1 !")
     
    def alert2():
       messagebox.showinfo("menu2", "c'est le résultat de menu2 !")
     
    def alert3():
       messagebox.showinfo("menu3", "c'est le résultat de menu3 !")
     
    def alert4():
       messagebox.showinfo("menu4", "c'est le résultat de menu4 !")
     
    def alert5():
       messagebox.showinfo("menu5", "c'est le résultat de menu5 !")
     
    def alert6():
       messagebox.showinfo("faire quleque avec à propos", "c'est le résultat de l'à propos !")
     
     
    # création menu pour fenêtre
    def barre_de_menus():
        menubar = Menu(fenetre, background="green")
     
        menu1 = Menu(menubar, tearoff=0, background="green")
        menu1.add_command(label="sous-menu1", command=alert1)
        menu1.add_command(label="sous-menu2", command=alert2)
        menu1.add_separator()
        menu1.add_command(label="Quitter", command=fenetre.destroy)
        menubar.add_cascade(label="premier menu", menu=menu1)
     
        menu2 = Menu(menubar, tearoff=0, background="green")
        menu2.add_command(label="sous-menu3", command=alert3)
        menu2.add_command(label="sous-menu4", command=alert4)
        menu2.add_command(label="sous-menu5", command=alert5)
        menubar.add_cascade(label="deuxième menu", menu=menu2)
     
        menu3 = Menu(menubar, tearoff=0, background="green")
        menu3.add_command(label="A propos", command=alert6)
        menubar.add_cascade(label="Aide", menu=menu3)
     
        fenetre.config(menu=menubar)

  2. #2
    Futur Membre du Club
    Homme Profil pro
    Webmaster
    Inscrit en
    Mai 2015
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Mai 2015
    Messages : 4
    Par défaut j'évolue....
    Merci à tous ceux qui ont lu mon message !
    Je comprends que ce n'est pas possible...
    donc je m'oriente par un biais: je supprime la barre de titres en utilisant "overrideredirect(1)... sans oublier de prévoir un bouton pour fermer la fenêtre...
    puis j'inclus une barre de menus... là j'ai gagné la moitié de ma solution ! j'ai progressé, mais:
    comment faire pour pouvoir déplacer ma barre de menus et la faire glisser un peu vers le bas de mon ecran pour insérer mon titre ?
    lorsque j'essaie d'utiliser la méthode "place" j'ai le message d'erreur suivant:
    " File "/usr/lib/python3.5/tkinter/__init__.py", line 2039, in place_configure + self._options(cnf, kw)) tkinter.TclError: can't use placer on top-level window ".140141056978504"; use wm command instead"
    je comprends donc que je ne peux pas utiliser la méthode place mais que je dois utiliser une wm command... de quoi s'agit il? quelqu'un peut il m'éclairer ?

    par avance merci à vous

  3. #3
    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,

    Citation Envoyé par Papitoto Voir le message
    lorsque j'essaie d'utiliser la méthode "place" j'ai le message d'erreur suivant:
    " File "/usr/lib/python3.5/tkinter/__init__.py", line 2039, in place_configure + self._options(cnf, kw)) tkinter.TclError: can't use placer on top-level window ".140141056978504"; use wm command instead"
    "place" (et autres "pack", "grid", ...) gère le placement des widgets à l'intérieur des fenêtres "principales" que sont les choses affichées lors de des appels à Tk() et Toplevel().
    Ces fenêtres là sont gérées par le window manager (celui qui gère ce qui s'affiche sur l'écran de votre ordinateur) et on va devoir utiliser wm_geometry.

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

  4. #4
    Futur Membre du Club
    Homme Profil pro
    Webmaster
    Inscrit en
    Mai 2015
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Mai 2015
    Messages : 4
    Par défaut comment trouver un tuto pour utiliser wm geometry avec menubar?
    merci pour les premières infos mais je n'arrive pas à trouver un tuto pour pouvoir utiliser wm geometry avec menubar ? sachant que c'est la barre de menus que je voudrais maintenant pouvoir déplacer pour pouvoir en fait créer virtuellement une ligne vide ou un espace vide dans laquelle j'insèrerai un label en haut de ma fenêtre juste avant ma barre de menus... mais puis-je lle faire avec l'utilisation de l'override ?
    je cherche peut être mal ?
    toute information pouvant m'orienter sera la bienvenue
    par avance, je vous en remercie

  5. #5
    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,

    L'idée derrière tout çà, c'est quand même de faire en sorte qu'une application Tk ressemble aux autres applications... La barre de titre, les Menu,... sont gérés par le window manager de la plate-forme....
    Et tk lui délègue tout ce qu'il peut, histoire de ne pas avoir à ré-écrire du code pour porter Tk sur une autre plateforme, un autre window manager,...
    Donc, s'il y a une solution, elle passe par le window manager de la plateforme.
    Si elle existe, elle devrait être documentée et vous devriez même trouver des exemples (peu probable qu'ils soient écrits pour le programmeur Python mais peu importe, la question étant "est-il possible de...").
    Une fois trouvé ce trou de souris, il faut arriver à le faire fonctionner avec tkinter depuis Python.

    Ca fait beaucoup de boulot pour avoir une application qui ne ressemble pas aux autres.

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

  6. #6
    Futur Membre du Club
    Homme Profil pro
    Webmaster
    Inscrit en
    Mai 2015
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Mai 2015
    Messages : 4
    Par défaut merci
    au départ de l'idée c'était pour une question d'esthétique...
    merci pour vos réponses...
    je vais voir comment je peux me débrouiller ou alors partir sur un autre cheminement...
    peut être arriverai-je à vous dire si j'ai trouvé une fin à ma recherche... et si oui comment j'y suis parvenu car je pense que cela peut intéresser quelques uns

    encore merci car quoiqu'il arrive j'aurai pu progresser grâce à vos réponses

    à bientôt

Discussions similaires

  1. Réponses: 1
    Dernier message: 27/06/2007, 08h23
  2. Réponses: 12
    Dernier message: 18/04/2007, 19h13
  3. Réponses: 1
    Dernier message: 27/03/2007, 12h57
  4. Comment ajouter un bouton dans la barre de titre d'une fenêtre ?
    Par Interruption13h dans le forum C++Builder
    Réponses: 10
    Dernier message: 04/07/2006, 19h07
  5. Réponses: 5
    Dernier message: 27/05/2006, 12h06

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