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 :

create_text: Créer une phrase avec mots colorés


Sujet :

Tkinter Python

  1. #1
    Membre expérimenté
    Avatar de MPython Alaplancha
    Homme Profil pro
    Paysan à 3 francs six sous
    Inscrit en
    Juin 2018
    Messages
    870
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Paysan à 3 francs six sous
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Juin 2018
    Messages : 870
    Points : 1 522
    Points
    1 522
    Billets dans le blog
    4
    Par défaut create_text: Créer une phrase avec mots colorés
    Bonjour,

    Je cherche une solution pour afficher sur mon canevas une Phrase dont la première lettre serait de couleur différente des autres.
    Je saurais faire ça avec le widget Text, mais comme mon intention finale consiste en une animation du texte qui se déplacerait sur mon caneva, je pense qu'il va falloir que je bricole avec create_ text.
    Des idées?
    #Rien de nouveau sous le soleil, tout est vanité comme courir après le vent!
    Developpement pour Android avec Python3/Kivy/Buildozer

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

    .create_text ne permet pas d'appliquer des propriétés à des bouts de texte: seulement à l'ensemble.

    Rien n'empêche d'afficher un texte en le découpant (plusieurs appels à .create_text) et de déplacer le tout (associé via un tag). La difficulté sera alors de calculer l'emplacement des bouts pour masquer le découpage.
    Une autre option serait d'utiliser .create_window pour afficher un widget Text dans le Canvas et avoir la flexibilité du widget Text côté polices de caractères.

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

  3. #3
    Membre expérimenté
    Avatar de MPython Alaplancha
    Homme Profil pro
    Paysan à 3 francs six sous
    Inscrit en
    Juin 2018
    Messages
    870
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Paysan à 3 francs six sous
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Juin 2018
    Messages : 870
    Points : 1 522
    Points
    1 522
    Billets dans le blog
    4
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    Rien n'empêche d'afficher un texte en le découpant (plusieurs appels à .create_text) et de déplacer le tout (associé via un tag). La difficulté sera alors de calculer l'emplacement des bouts pour masquer le découpage.
    Oui c'est bien à ça que je pensais ,seulement je manque d'idée sur la façon de procéder pour 'concaténer proprement' sur mon canvas les différents morceaux du texte..

    Citation Envoyé par wiztricks Voir le message
    Une autre option serait d'utiliser .create_window pour afficher un widget Text dans le Canvas et avoir la flexibilité du widget Text côté polices de caractères.
    Procédant ainsi, je ne pourrais pas mouvoir l'image de mon texte sur mon canvas, non?
    #Rien de nouveau sous le soleil, tout est vanité comme courir après le vent!
    Developpement pour Android avec Python3/Kivy/Buildozer

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

    Citation Envoyé par Hominidé Voir le message
    Oui c'est bien à ça que je pensais ,seulement je manque d'idée sur la façon de procéder pour 'concaténer proprement' sur mon canvas les différents morceaux du texte..
    Soit vous le faites au pif, soit vous étudiez les polices de caractères pour recoder le placement. En fait la position, c'est calculer (x, y). y on le connaît.

    Citation Envoyé par Hominidé Voir le message
    Procédant ainsi, je ne pourrais pas mouvoir l'image de mon texte sur mon canvas, non?
    Vous allez pouvoir déplacer l'item correspondant au widget Text et le texte qu'il contient comme n'importe quel autre item du Canvas.
    Le gros défaut de cette méthode est que les widgets affichés dans le Canvas seront toujours "au dessus" des autres.

    Une 3ème méthode pourrait être d'utiliser .place pour bouger le texte dans les limites d'un cadre / frame à dimensions fixes. Méthode que je n'ai pas mentionné car je suppose que le canvas ne sert pas juste à afficher un texte qu'on déplace.

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

  5. #5
    Membre expérimenté
    Avatar de MPython Alaplancha
    Homme Profil pro
    Paysan à 3 francs six sous
    Inscrit en
    Juin 2018
    Messages
    870
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Paysan à 3 francs six sous
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Juin 2018
    Messages : 870
    Points : 1 522
    Points
    1 522
    Billets dans le blog
    4
    Par défaut
    Merci,
    Citation Envoyé par wiztricks Voir le message
    En fait la position, c'est calculer (x, y). y on le connaît.

    - W
    Je vais voir si en utilisant tkinter.font et measure(), j'arrive à faire quelque chose...
    #Rien de nouveau sous le soleil, tout est vanité comme courir après le vent!
    Developpement pour Android avec Python3/Kivy/Buildozer

  6. #6
    Membre expérimenté
    Avatar de MPython Alaplancha
    Homme Profil pro
    Paysan à 3 francs six sous
    Inscrit en
    Juin 2018
    Messages
    870
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Paysan à 3 francs six sous
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Juin 2018
    Messages : 870
    Points : 1 522
    Points
    1 522
    Billets dans le blog
    4
    Par défaut
    Merci wiztricks.
    J'explore tout ça...
    #Rien de nouveau sous le soleil, tout est vanité comme courir après le vent!
    Developpement pour Android avec Python3/Kivy/Buildozer

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

    Sinon dans le quick&dirty:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    import tkinter as tk
     
    w = tk.Canvas()
    w.create_text(10, 10, text='Abcdef', anchor='nw')
    w.create_text(10, 10, text='A', anchor='nw', fill='red')
    w.pack()
    w.mainloop()
    que l'on peut améliorer avec:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    import tkinter as tk
     
    w = tk.Canvas()
    a = w.create_text(10, 10, text='Abcdef', anchor='nw')
    b = w.create_text(10, 10, text='A', anchor='nw', fill='red')
    _, _, x1, _ = w.bbox(b)
    c = w.create_text(x1, 10, text='bcdef', anchor='nw')
    w.delete(a)
    w.pack()
    w.mainloop()
    mais ce n'est peut être pas une bonne idée.

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

  8. #8
    Membre expert
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    2 873
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 2 873
    Points : 3 717
    Points
    3 717
    Par défaut
    Salut,

    En supposant que ce serait plus facile de déplacer une image... N'est-il pas possible de faire du texte une image ?

  9. #9
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    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 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Citation Envoyé par Beginner. Voir le message
    En supposant que ce serait plus facile de déplacer une image...
    Regardez ce qu'on peut faire avec les "tags": ils permettent d'appliquer une opération à l'ensemble des items ayant le même tag. Déplacer étant une opération parmi d'autres.

    Citation Envoyé par Beginner. Voir le message
    N'est-il pas possible de faire du texte une image ?
    On peut recopier un tas de pixels dans une image... avec PIL(low). Et avec cette bibliothèque on doit aussi pouvoir utiliser ImageDraw pour ajouter texte et graphiques dans une image (un peu comme on le fait dans un Canvas).

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

  10. #10
    Membre expert
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    2 873
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 2 873
    Points : 3 717
    Points
    3 717
    Par défaut
    Tout cela m'a l'air intéressant...
    Merci.

  11. #11
    Membre expérimenté
    Avatar de MPython Alaplancha
    Homme Profil pro
    Paysan à 3 francs six sous
    Inscrit en
    Juin 2018
    Messages
    870
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Paysan à 3 francs six sous
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Juin 2018
    Messages : 870
    Points : 1 522
    Points
    1 522
    Billets dans le blog
    4
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    Salut,

    Sinon dans le quick&dirty:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    import tkinter as tk
     
    w = tk.Canvas()
    w.create_text(10, 10, text='Abcdef', anchor='nw')
    w.create_text(10, 10, text='A', anchor='nw', fill='red')
    w.pack()
    w.mainloop()
    que l'on peut améliorer avec:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    import tkinter as tk
     
    w = tk.Canvas()
    a = w.create_text(10, 10, text='Abcdef', anchor='nw')
    b = w.create_text(10, 10, text='A', anchor='nw', fill='red')
    _, _, x1, _ = w.bbox(b)
    c = w.create_text(x1, 10, text='bcdef', anchor='nw')
    w.delete(a)
    w.pack()
    w.mainloop()
    mais ce n'est peut être pas une bonne idée.

    - W
    Merci pour le code.
    Pour l'instant, je me conterais de cette approche qui, somme toutes, est suffisante dans le cas où il n'y a qu'une seule police utilisée dans l'assemblage .
    #Rien de nouveau sous le soleil, tout est vanité comme courir après le vent!
    Developpement pour Android avec Python3/Kivy/Buildozer

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

Discussions similaires

  1. [Python 3.X] Prediction de lien entre deux mots dans une phrase avec Text Mining
    Par -RoCk- dans le forum Général Python
    Réponses: 0
    Dernier message: 12/05/2020, 15h44
  2. Créer une vue avec des requêtes UNION ?
    Par webtheque dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 04/04/2005, 12h37
  3. Réponses: 4
    Dernier message: 09/02/2005, 10h44
  4. Créer une grille avec centage
    Par lil_jam63 dans le forum Algorithmes et structures de données
    Réponses: 10
    Dernier message: 16/08/2004, 16h21
  5. [Image]Créer une image avec JAVA 1.1
    Par burno dans le forum 2D
    Réponses: 4
    Dernier message: 11/08/2004, 09h19

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