Précédent   Forum du club des développeurs et IT Pro > Autres langages > Python & Zope > GUI > Tkinter
Tkinter Forum d'entraide sur Tkinter et compatible (Tix, Pmw, ...). Avant de poster -> FAQ Tkinter
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 18/01/2013, 21h08   #1
oscar1996
Invité de passage
 
Homme
Lycéen
Inscription : 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 : 4
Points : 4
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.
oscar1996 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/01/2013, 19h04   #2
wiztricks
Expert Confirmé Sénior
 
Inscription : juin 2008
Messages : 3 688
Détails du profil
Informations forums :
Inscription : juin 2008
Messages : 3 688
Points : 4 516
Points : 4 516
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
wiztricks est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/01/2013, 21h10   #3
PauseKawa
Expert Confirmé
 
Avatar de PauseKawa
 
Homme Patrice BLANGARIN
Technicien Help Desk, maintenance, réseau, système et +
Inscription : juin 2006
Messages : 2 608
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 608
Points : 3 715
Points : 3 715
Bonsoir wiztricks,

Citation:
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.
PauseKawa est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/01/2013, 14h34   #4
wiztricks
Expert Confirmé Sénior
 
Inscription : juin 2008
Messages : 3 688
Détails du profil
Informations forums :
Inscription : juin 2008
Messages : 3 688
Points : 4 516
Points : 4 516
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.

Citation:
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
wiztricks est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/01/2013, 13h47   #5
oscar1996
Invité de passage
 
Homme
Lycéen
Inscription : 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 : 4
Points : 4
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 !
oscar1996 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/01/2013, 13h48   #6
oscar1996
Invité de passage
 
Homme
Lycéen
Inscription : 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 : 4
Points : 4
Par défaut Re-transparence

Pardon, essayeR
oscar1996 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 10h12.


 
 
 
 
Partenaires

Hébergement Web