Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 6 sur 6
  1. #1
    Invité de passage
    Homme Profil pro
    Lycéen
    Inscrit en
    novembre 2012
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Lycéen
    Secteur : Service public

    Informations forums :
    Inscription : novembre 2012
    Messages : 11
    Points : 3
    Points
    3

    Par défaut Transparence de widgets

    Bonsoir tout le monde!
    J'ai dernièrement réalisé un petit programme, que je souhaiterais améliorer en y incorporant une image en arrière plan. Le problème est que chaque widget (que ce soit une frame, un bouton, ou une listbox) cache ledit arrière plan. J'aimerais donc pouvoir rendre le background des widgets de mon programme (cités précédemment), partiellement ou complètement transparent. La seule alternative à peu près viable que j'ai pu trouver était d'utiliser un canvas et d'y inclure mes widgets, mais il n'existe pas de widget canvas_listbox ....

    D'avance merci pour toutes vos réponses (TOUT est bon à prendre ;-) )
    Raph.

  2. #2
    Modérateur

    Homme Profil pro
    Architecte technique
    Inscrit en
    juin 2008
    Messages
    5 324
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : Industrie

    Informations forums :
    Inscription : juin 2008
    Messages : 5 324
    Points : 7 425
    Points
    7 425

    Par défaut

    Salut,

    Les versions actuelles de TCL/Tk permettent de "modifier" la transparence d'un Toplevel et celle des widgets (Listbox) qu'on aura "mis dedans".
    Pour cela il faut modifier l'attribut -alpha de la window (au sens window manager):
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    >>> import tkinter as tk
    >>> app = tk.Tk()
    >>> w = tk.Listbox()
    >>> w.pack()
    >>> app.wm_attributes()
    ('-alpha', 1.0, '-transparentcolor', '', '-disabled', 0, '-fullscreen', 0, '-toolwindow', 0, '-topmos
    t', 0)
    >>> app.wm_attributes('-alpha', 0.5)
    ''
    note: le 0.5 dit transparent à 50%.
    Et attention à la syntaxe, la méthode "wm_attributes" est assez "crue" côté masquage du TCL/Tk ne pas lui passer de liste de clés/valeurs!!
    - W
    Architectures Post-Modernes

  3. #3
    Expert Confirmé Avatar de PauseKawa
    Homme Profil pro Patrice BLANGARIN
    Technicien Help Desk, maintenance, réseau, système et +
    Inscrit en
    juin 2006
    Messages
    2 720
    Détails du profil
    Informations personnelles :
    Nom : Homme Patrice BLANGARIN
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien Help Desk, maintenance, réseau, système et +
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : juin 2006
    Messages : 2 720
    Points : 3 599
    Points
    3 599

    Par défaut

    Bonsoir wiztricks,

    en y incorporant une image en arrière plan
    Et positionner un toplevel en overrideredirect sur le Frame principal de la fenêtre root ?
    En plus de la gestion de la géométrie par rapport au Widget cela demande une gestion de la position du toplevel (focus/lift), des bindings Unmap/Map/Configure, voir du protocol WM_DELETE_WINDOW du toplevel avec un destroy du root.
    C'est possible, et pourquoi pas bien que capilotracté (), mais il vas falloir jouer fin avec l'overrideredirect.

    A noter toutefois qu'alpha et le réactions d'overrideredirect dépendent du système.

    Toujours pas de poste Windows chez moi (et pas d'alpha) mais en aircoding cela donne +- (sans me prendre la tête avec un Frame et sa géométrie mais cela me semblerai plus juste):
    Code :
    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
    import Tkinter as tk
     
    def SetBackground(root, imagefile):
        def OnConfig(event):
         fond.geometry(root.winfo_geometry())
         #root.focus_force()
     
        def OnUnmap(event):
         fond.withdraw()
     
        def OnMap(event):
            fond.deiconify()
            OnConfig(None)
            root.after(1, root.focus_force)
     
        fond = tk.Toplevel()
        Photo = tk.PhotoImage(file=imagefile)
        labelimage = tk.Label(fond, image=Photo, bd=0)
        labelimage.photo = Photo
        labelimage.pack()
        fond.update()
        root.geometry(fond.winfo_geometry())
        root.attributes("-alpha", 0.5)
        root.grab_set()
        root.bind("<Configure>", OnConfig)
        root.bind("<Unmap>", OnUnmap)
        root.bind("<Map>", OnMap)
        fond.protocol("WM_DELETE_WINDOW", root.destroy)
        fond.overrideredirect(1)
        root.after(1, root.focus_force)
     
    root = tk.Tk()
    root.title("Tkinter alpha sample")
    tk.Label(root, text="Un Widget").pack()
    tk.Button(root, text="Quit", command=root.destroy).pack()
    SetBackground(root, "image.gif")
    root.mainloop()
    (Exemple : A de bonnes chances de ne pas fonctionner)

    @+

    Edit : C'est une question récurrente et une petite contribution dans ce sens serait sans doute pas mal...
    Merci d'utiliser le forum pour les questions techniques.

  4. #4
    Modérateur

    Homme Profil pro
    Architecte technique
    Inscrit en
    juin 2008
    Messages
    5 324
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : Industrie

    Informations forums :
    Inscription : juin 2008
    Messages : 5 324
    Points : 7 425
    Points
    7 425

    Par défaut

    Salut PauseKawa,

    On peut effectivement faire une réponse plus élaborée mais sans connaître le contexte, difficile de savoir ce qui est applicable ou pas sans un retour du PO.

    C'est une question récurrente et une petite contribution dans ce sens serait sans doute pas mal...
    La version de TCL/Tk qui apporte des améliorations sur ces questions devait être intégrée à Python 3.3... Mais le train est parti sans elle.
    - W
    Architectures Post-Modernes

  5. #5
    Invité de passage
    Homme Profil pro
    Lycéen
    Inscrit en
    novembre 2012
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Lycéen
    Secteur : Service public

    Informations forums :
    Inscription : novembre 2012
    Messages : 11
    Points : 3
    Points
    3

    Par défaut Re-transparence

    Salut tout le monde!
    Merci de vos réponses, je vais essaye ce que tu as dit PauseKawa, mais mon petit regret est que la transparence caractères est aussi affectée avec la modification de la valeur alpha. J’espère qu'ils vont faire une mise à jour rapidement !

  6. #6
    Invité de passage
    Homme Profil pro
    Lycéen
    Inscrit en
    novembre 2012
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Lycéen
    Secteur : Service public

    Informations forums :
    Inscription : novembre 2012
    Messages : 11
    Points : 3
    Points
    3

    Par défaut Re-transparence

    Pardon, essayeR

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •