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 :

Colorer l'arrière-plan de tkFileDialog


Sujet :

Tkinter Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Avatar de Luke spywoker
    Homme Profil pro
    Etudiant informatique autodidacte
    Inscrit en
    Juin 2010
    Messages
    1 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Etudiant informatique autodidacte

    Informations forums :
    Inscription : Juin 2010
    Messages : 1 077
    Par défaut Colorer l'arrière-plan de tkFileDialog
    Salut les pythons Tkinter,
    Je ne sais si il est possible de modifier la couleur de fond d'un widget tkFileDialog, car comme l'illustre le code suivant cela est possible avec un widget tkColorChooser:
    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
     
    #!/usr/bin/python
    # -*- coding: utf-8 -*-
     
    from Tkinter import *
    import tkColorChooser
    import tkFileDialog
     
    def set_in_red() :
      main_window.tk_setPalette(background="red",foreground='black')
     
    def set_in_green() :
      main_window.tk_setPalette(background="green",foreground='black')
     
    def set_in_blue() :
      main_window.tk_setPalette(background="blue",foreground='black')  
     
    def set_in_yellow() :
      main_window.tk_setPalette(background="yellow",foreground='black')  
     
    def show_colorchooser() :
      tkColorChooser.askcolor(parent=main_window)
     
    def show_filechooser() :
      tkFileDialog.askopenfile(parent=main_window)
     
    main_window=Tk()
     
    but_show_colorchooser=Button(main_window,text="Color Chooser ",command=show_colorchooser)
    but_show_filechooser=Button(main_window,text="File Chooser ",command=show_filechooser)
    but_set_in_red=Button(main_window,text="Red",bg='red',command=set_in_red)
    but_set_in_green=Button(main_window,text="Green",bg='green',command=set_in_green)
    but_set_in_blue=Button(main_window,text="Blue",bg='blue',command=set_in_blue)
    but_set_in_yellow=Button(main_window,text="Yellow",bg='yellow',command=set_in_yellow)
     
    but_show_colorchooser.grid(row=0,column=0,columnspan=4,sticky="EW")
    but_show_filechooser.grid(row=0,column=4,columnspan=4,sticky="EW")
    but_set_in_red.grid(row=1,column=0,sticky="EW")
    but_set_in_green.grid(row=1,column=2,sticky="EW")
    but_set_in_blue.grid(row=1,column=4,sticky="EW")
    but_set_in_yellow.grid(row=1,column=7,sticky="EW")
     
    main_window.mainloop()
    J'attends vos réponses avec impatience, merci pour vos avis éclairés.

  2. #2
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 741
    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 741
    Par défaut
    Salut,
    La class FileDialog n'a pas d'interface permettant de modifier les attributs des widgets qui la compose.
    Rien n'interdit de la s/classer pour les modifier après leur construction et avant l'appel aux méthodes .show ou .go qui font démarrent l'interface. Il suffit de prendre le temps de lire les sources pour récupérer le nom des attributs qui référencent les widgets ad hoc.
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Membre Expert Avatar de PauseKawa
    Homme Profil pro
    Technicien Help Desk, maintenance, réseau, système et +
    Inscrit en
    Juin 2006
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    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 725
    Par défaut
    Bonjour,

    Il ne faut pas oublier que sous Windows il ne s'agit pas de Toplevels Tkinter mais des boites de dialogue du Windows Manager, soit comctl32.dll pour l'API Windows sous XP par exemple. Utilisez le sélectionner de couleur ou fichier/ouvrir sous paint (ou encore ouvrir avec notepad : Les outils Windows de 'base') pour voir cela :
    Nom : color.jpg
Affichages : 343
Taille : 98,5 Ko
    Nom : ouvrir.jpg
Affichages : 246
Taille : 78,8 Ko

    Sous Tkinter l'"intégration" et, somme toute, "générique" et les résultats vont différés d'un os/système à l'autre. Par exemple sous Python 2.7/Windows XP .tk_setPalette() est sans effets sur un tkColorChooser.askcolor() alors que sous mon Xfce la fenêtre change complètement de couleur. Autre exemple d'"intégration" : L'option title ne fonctionne pas pour tkColorChooser.askcolor() sous Windows.
    Sous Unix/Linux les dialogues sont codés en Tcl.

    Je ne jette pas la pierre pour Windows car en fait ce n'est là que pour fournir des dialogues basiques : Rien n’empêche de faire ses propres Toplevels. Il est aussi possible d'utiliser le dialogue natif Tcl :
    wiki
    On Windows, it calls a native file selector. You can get the Tcl-coded "original" as used on Unix/Linux by explicitly calling:

    set filename [::tk::dialog::file:: open arg arg..]
    Maintenant si vous voulez vraiment modifier les dialogues il vas falloir passer par l'API sous Windows (le PAINT de l'API Windows par exemple, via ctypes ou Win32) ou taper dans les appels à l'interpréteur Tcl/Tk (w.tk.call) avant le show comme l'indique wiztricks.
    Prenez en considération qu'il vous sera plus facile de faire vos propres Toplevels et que cela serait plus 'universel'.

    @+

    Edit : Plus d'explications.

  4. #4
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 4 062
    Par défaut
    Rien n’empêche de faire ses propres Toplevels.
    Prenez en considération qu'il vous sera plus facile de faire vos propres Toplevels et que cela serait plus 'universel'.
    +1, c'est la solution...

  5. #5
    Membre éprouvé
    Avatar de Luke spywoker
    Homme Profil pro
    Etudiant informatique autodidacte
    Inscrit en
    Juin 2010
    Messages
    1 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Etudiant informatique autodidacte

    Informations forums :
    Inscription : Juin 2010
    Messages : 1 077
    Par défaut
    J'ai remarquer que le module Tix contient une classe : FileSelectDialog()

    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
     
    class FileSelectDialog(TixWidget)
     |  FileSelectDialog - Motif style file select dialog.
     |  
     |  Subwidgets       Class
     |  ----------       -----
     |  btns       StdButtonBox
     |  fsbox       FileSelectBox
     |  
     |  Method resolution order:
     |      FileSelectDialog
     |      TixWidget
     |      Tkinter.Widget
     |      Tkinter.BaseWidget
     |      Tkinter.Misc
     |      Tkinter.Pack
     |      Tkinter.Place
     |      Tkinter.Grid
     |      Form
     |  
     |  Methods defined here:
     |  
     |  __init__(self, master, cnf={}, **kw)
     |      # FIXME: It should inherit -superclass tixStdDialogShell
     |  
     |  popdown(self)
     |  
     |  popup(self)
     |  
     |  ----------------------------------------------------------------------
    Le problème est que je ne sais pas me servir de Tix,
    voici ma piètre tentative:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    import Tix
    from Tkinter import *
    a=Tk()
    Tix.FileSelectDialog(a)
    Traceback (most recent call last):
      File "<input>", line 1, in <module>
      File "/usr/lib/python2.7/lib-tk/Tix.py", line 833, in __init__
        ['options'], cnf, kw)
      File "/usr/lib/python2.7/lib-tk/Tix.py", line 322, in __init__
        self.tk.call(widgetName, self._w, *extra)
    TclError: invalid command name "tixFileSelectDialog"
    Je vient de lire la FAQ mais y a un bug sur mon système:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    >>> import Tix as t
    >>> a=t.Tk()
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
      File "/usr/lib/python2.7/lib-tk/Tix.py", line 225, in __init__
        self.tk.eval('package require Tix')
    _tkinter.TclError: can't find package Tix
    Toute aide est la bienvenue, dont je vous serai grandement reconnaissant.
    Mon but est énoncer plus haut dans le post.
    Merci pour vos réponses.

  6. #6
    Membre Expert Avatar de PauseKawa
    Homme Profil pro
    Technicien Help Desk, maintenance, réseau, système et +
    Inscrit en
    Juin 2006
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    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 725
    Par défaut
    Bonjour,

    Ceci est une autre question : Merci de faire un sujet par question.

    Bref :
    mais y a un bug sur mon système
    Quel système ?
    Installé comment ?
    Mon avis : En fait votre erreur viens du fait que le .so (librairie sous tux puisque "/usr/lib/python2.7/lib-tk/Tix.py") n'est pas renseigner au niveau interpréteur Tcl/Tk / Environnement.
    Code de Tix:
    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
    class Tk(Tkinter.Tk, tixCommand):
        """Toplevel widget of Tix which represents mostly the main window
        of an application. It has an associated Tcl interpreter."""
        def __init__(self, screenName=None, baseName=None, className='Tix'):
            Tkinter.Tk.__init__(self, screenName, baseName, className)
            tixlib = os.environ.get('TIX_LIBRARY')
            self.tk.eval('global auto_path; lappend auto_path [file dir [info nameof]]')
            if tixlib is not None:
                self.tk.eval('global auto_path; lappend auto_path {%s}' % tixlib)
                self.tk.eval('global tcl_pkgPath; lappend tcl_pkgPath {%s}' % tixlib)
            # Load Tix - this should work dynamically or statically
            # If it's static, tcl/tix8.1/pkgIndex.tcl should have
            #               'load {} Tix'
            # If it's dynamic under Unix, tcl/tix8.1/pkgIndex.tcl should have
            #               'load libtix8.1.8.3.so Tix'
            self.tk.eval('package require Tix')
    @+

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 06/08/2008, 16h11
  2. [VB6] centrer l'image d'arrière-plan de ma Form ?
    Par ghohm dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 29/04/2004, 01h58
  3. petit problème premier plan, arrière plan
    Par gros bob dans le forum OpenGL
    Réponses: 4
    Dernier message: 19/04/2004, 12h00
  4. comment stoper 1 thread d'arrière-plan
    Par ms91fr dans le forum Langage
    Réponses: 3
    Dernier message: 06/06/2003, 17h46
  5. changer l'image d'arrière plan du bureau
    Par etenclin dans le forum MFC
    Réponses: 7
    Dernier message: 22/08/2002, 15h54

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