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 :

Remplacer les icones de fenetre (le "Tk") sous windows *et* sous linux?


Sujet :

Tkinter Python

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2013
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2013
    Messages : 29
    Points : 14
    Points
    14
    Par défaut Remplacer les icones de fenetre (le "Tk") sous windows *et* sous linux?
    Bonjour,

    Je réalise une petite application en Python (2.7) sous Tkinter (8.5)
    Je remplace actuellement avec succès l'icône de fenêtre "Tk rouge" par défaut par un tk.iconbitmap('if_Flow_block_131774.ico')

    Ca marche sans souci sous windows 10, mais sous linux Mint 18.1 (mêmes versions de Python et Tkinter), il se plaint de ne pas trouver le fichier (qui est aussi, comme sous windows, dans le même répertoire que le fichier .py )
    J'ai essayé en convertissant le .ico en .ppm et en .xdm mais sans succes...
    Bref, je cherche une solution qui marche avec les 2 OS.

    PS: je viens d'y penser: l'icône fait 128x128... Un lien possible? Si oui, quelle taille adopter?

    Merci pour votre aide!

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 283
    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 283
    Points : 36 770
    Points
    36 770
    Par défaut
    Salut,

    Citation Envoyé par Jijil Voir le message
    Ca marche sans souci sous windows 10, mais sous linux Mint 18.1 (mêmes versions de Python et Tkinter), il se plaint de ne pas trouver le fichier (qui est aussi, comme sous windows, dans le même répertoire que le fichier .py )
    Il ne se plaint pas sans raison....
    Pourquoi chercher une solution avant d'avoir compris pourquoi le fichier n'était pas trouvé?
    Déjà vous pourriez fabriquer un petit script qui se contente de faire un simple "open"...

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

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2013
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2013
    Messages : 29
    Points : 14
    Points
    14
    Par défaut
    Merci pour votre réponse... et de cette piste.
    Une différence peut-etre importante, c'est que sous windows, j'ai lancé le script avec Spyder (de l'IDE Anaconda), tandis que sous linux, je l'ai lancé comme un script exécutable (la premiere ligne du fichier est #!/usr/bin/python )

    Est-ce que donc, le probleme viendrait plutôt d'un fichier au mauvais endroit? (et non pas du format d'image?). J'ai également testé avec un "./" devant son nom, sans succes (avec l’inconvénient de perdre la compatibilité windows).

    Merci encore...

  4. #4
    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
    Bonjour,

    Je me rappelle que j'avais aussi eu un problème sur linux avec les fichiers *.ico, format pas supporté il me semble, du coup je me suis tourné vers iconphoto (Tk.iconphoto) avec un format gif qui fonctionne très bien.

    Quant à la dimension, il est préférable de s'en tenir à un 16×16, là non plus je ne me rappellle plus où j'avais lu ça, mais c'est ce qui est mieux pour la compatibilité avec les différents sytèmes.
    Le temps ronge l'amour comme l'acide.

  5. #5
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 283
    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 283
    Points : 36 770
    Points
    36 770
    Par défaut
    Citation Envoyé par Jijil Voir le message
    Est-ce que donc, le probleme viendrait plutôt d'un fichier au mauvais endroit? (et non pas du format d'image?). J'ai également testé avec un "./" devant son nom, sans succes (avec l’inconvénient de perdre la compatibilité windows).
    Avez vous essayé de faire un simple "open" dans des conditions semblables? (comme suggéré dans mon post précédent).
    note: vous pouvez utiliser les chemins Linux sur Windows (essayez, çà fonctionne).

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

  6. #6
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 283
    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 283
    Points : 36 770
    Points
    36 770
    Par défaut
    Citation Envoyé par bistouille Voir le message
    Je me rappelle que j'avais aussi eu un problème sur linux avec les fichiers *.ico, format pas supporté il me semble, du coup je me suis tourné vers iconphoto (Tk.iconphoto) avec un format gif qui fonctionne très bien.
    L'idée est de montrer au PO que le message d'erreur est important: il aurait trouvé problème et solution tout seul avec un peu de recherche sur Internet. Pour l'instant, il n'a même pas jugé intéressant de poster ni le code ni le message d'erreur (sauf dire "il se plaint de ne pas trouver le fichier").

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

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2013
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2013
    Messages : 29
    Points : 14
    Points
    14
    Par défaut
    Merci pour ces patientes réponses.

    Je ne suis pas avare en tests ni en recherches internet. C'est justement la piste internet qui m'a fait penser que le .ico n'était pas universellement supporté. Mais j'avoue que dans l'empressement, je n'avais encore suivie que celle-là.
    Je ne suis pas en mesure de poster le message d'erreur Linux, n'ayant pas acces pour l'instant à la machine.
    Je viens de tester: le open() fonctionne sous windows. Normal mais à voir sous linux donc. Merci pour l'info "\" "/"

    Concernant le code, le voici:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    class MainWindow(object):
        """ fenetre principale du programme"""
        def __init__(self,master, queue, endCommand):
            """ création GUI """
            self.master=master
            self.queue=queue
            self.endCommand=endCommand
     
    #        self.titre=tk.StringVar()
    #        self.titre.set(self.master.title("Controle autoclaves"))
            #self.master.geometry("300x300")
            self.master.iconbitmap("if_Flow_block_131774.ico")
     
    #[...]
    qui est instancié par:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    class ThreadedClient(object):
        """ Partie principale du programme, qui lance le GUI et le thread de communication avec les réacteurs. """
        def __init__(self, master):
            """ initialisation graphique et démarrage de la communication"""
            self.master=master
            self.queue=Queue.Queue()
            self.gui= MainWindow(master, self.queue, self.endApplication)
    #[...]
    lui-même instancié par:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    if __name__ == "__main__":
     
    #[...]
        root=tk.Tk()
        listfen= OpenedWindows()  #dont j'ai parlé dans un autre post
     
        main = ThreadedClient(root)
       root.mainloop()

  8. #8
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 283
    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 283
    Points : 36 770
    Points
    36 770
    Par défaut
    Salut,

    Vous devriez pouvoir reproduire le problème en quelques lignes de code comme:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    import tkinter as tk
    root = tk.Tk()
    root.iconbitmap("if_Flow_block_131774.ico")
    tk.mainloop()
    Sur Linux, le nom du fichier doit être préfixé par un @, i.e. "@if_Flow_block_131774.ico"... et doit être un fichier .XBM. Ce qui est passablement compliqué.
    D'où la suggestion de bistouille:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    import tkinter as tk
    root = tk.Tk()
    image = tk.PhotoImage("if_Flow_block_131774.ico")
    root.tk.call('wm', 'iconphoto', root._w, image)
    tk.mainloop()
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2013
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2013
    Messages : 29
    Points : 14
    Points
    14
    Par défaut
    Merci pour la réponse et les suggestions
    Je m'y attèle dès que possible !

Discussions similaires

  1. Réponses: 12
    Dernier message: 17/07/2009, 11h03
  2. Réponses: 0
    Dernier message: 13/07/2009, 16h28

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