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

Python Discussion :

Taille en pixels d'une chaine de charactere


Sujet :

Python

  1. #1
    Membre du Club
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2012
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Janvier 2012
    Messages : 50
    Points : 45
    Points
    45
    Par défaut Taille en pixels d'une chaine de charactere
    bonjour a tous
    je voudrai savoir s'il ya un moyen de connaitre la taille en pixels d'une chaine de charactere.
    exemple
    examinons les 2 chaines de charactere suivantes:
    AZWYMM
    IITTII
    chacune de ces 2 charactere ont une longueur de 6 lettre
    mais la taille en pixels est totalement differente
    que dois-je faire??? et merci pour toute proposition...

  2. #2
    Expert confirmé 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
    Points : 4 005
    Points
    4 005
    Par défaut
    Bonjour,

    Tout vas dépendre de police de caractère.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    from Tkinter import Label
     
    e = Label(text="AZWYMM", bd=0)
    print e.winfo_reqwidth()
    e.config(text="IITTII")
    print e.winfo_reqwidth()
    e.config(font=("Helvetica", 16))
    print e.winfo_reqwidth()
    @+

  3. #3
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    1 064
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 064
    Points : 1 402
    Points
    1 402
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    from pygame import font
    font.init()
     
    font.Font("mafont",taille).size("chaîne de caractères ...") ==> largeur, hauteur

  4. #4
    Expert éminent
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    3 938
    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 : 3 938
    Points : 7 347
    Points
    7 347
    Par défaut
    Avec le module PIL ça doit être faisable aussi, mais la solution de PauseKawa n'impose pas une installation de librairie.

  5. #5
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 439
    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 439
    Points : 37 030
    Points
    37 030
    Par défaut
    Salut,
    Juste pour signaler cette entrée dans StackOverflow qui montre comment calculer la hauteur et la longueur d'un texte en utilisant l'objet Font de tkinter.
    - W

  6. #6
    Expert confirmé 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
    Points : 4 005
    Points
    4 005
    Par défaut
    Grilled par wiztricks.

    Ceci dit pas besoin d'instance pour cela.

  7. #7
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 439
    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 439
    Points : 37 030
    Points
    37 030
    Par défaut
    Salut,
    Citation Envoyé par PauseKawa Voir le message
    Grilled par wiztricks.

    Ceci dit pas besoin d'instance pour cela.
    Je n'ai peut être pas compris votre remarque.
    Ceci dit, Font récupère ses informations via des root.tk.call.
    Ce qui impose la création d'une instance 'Tk' "avant" qu'on peut passer à Font en premier paramètre dans le cas de plusieurs instances TCL/Tk.
    - W

  8. #8
    Expert confirmé 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
    Points : 4 005
    Points
    4 005
    Par défaut
    C'est un fouchage de doigts sur le clavier: Je voulais dire sans faire apparaître l'"instance" Tk() (afficher le GUI) .

    Par contre, comme je ne pratique pas pygame, quelqu’un pourrais m'expliquer ceci ?
    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
    44
    45
    46
    47
    def gettxtmetric(text, family=None, size=None):
        import sys
        if sys.version_info[0] > 2:
            from tkinter import Tk
            import tkinter.font as tkfont
        else:
            from Tkinter import Tk
            import tkFont as tkfont
     
        root = Tk()
        root.withdraw()
        root.overrideredirect(1)
        _f = tkfont.Font()
        if not family:
            family = _f.config()['family']
        if not size:
            size = _f.metrics()['linespace']
        f = tkfont.Font(family=family, size=size)
        h = f.metrics("linespace")
        w = f.measure(text)
        return root.destroy() or (w, h)
     
     
    # print(gettxtmetric("AZWYMM"))
    print("tkfont", gettxtmetric("IITTII", family="georgiaz", size=16))
    # print(gettxtmetric("AZWYMM", family="Helvetica", size=16))
     
    import sys
    if sys.version_info[0] > 2:
        from tkinter import Label
    else:
        from Tkinter import Label
     
    e = Label(text="IITTII", bd=0, highlightthickness=0, padx=0, pady=0, font=("georgiaz", "16"))
    # print(e.winfo_reqwidth(), e.winfo_reqheight())
    # e.config(text="AZWYMM")
    print("Label", e.winfo_reqwidth(), e.winfo_reqheight())
    # e.config(font=("Helvetica", 16))
    # print(e.winfo_reqwidth(), e.winfo_reqheight())
     
    if sys.version_info[0] > 2:
        sys.exit()
     
    from pygame import font
    font.init()
     
    print("pygame", font.Font("/usr/share/fonts/truetype/msttcorefonts/georgiaz.ttf", 16).size("IITTII"))
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ('tkfont', (50, 26))
    ('Label', 50, 26)
    pygame (57, 19)
    Cela viens du fichier ttf ? (les valeurs Tkinter sont justes)

  9. #9
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    1 064
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 064
    Points : 1 402
    Points
    1 402
    Par défaut
    peut-être que ces différentes libs ne rendent pas le texte de la même façon ...

  10. #10
    Expert confirmé 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
    Points : 4 005
    Points
    4 005
    Par défaut
    Bonjour,

    Sans aucun doute, et le choix d'une police truetype avec ses hints n'aide sans doute pas.
    Toutefois passer d'une police à empattements (serif) comme Georgia à une police à chasse fixe (monospace) tel que Courier New n'arrange rien:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ('tkfont', (50, 26))
    ('Label', 50, 26)
    ('pygame', (60, 19))
    Je doute que les hints soit pour quelque chose dans une si grande différence...

    @+

    Edit: La différence se retrouve avec une police de type 1 (Symbol)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ('tkfont', (50, 29))
    ('Label', 50, 29)
    ('pygame', (48, 22))
    Donc exit un souci avec le rendu truetype.

    Note pour les lecteurs: En gros les hints de truetype sont des algorithmes d'optimisation permettant d'éviter des effets optiques indésirables. Ils sont utilisés (Scribus par exemple) ou pas.

  11. #11
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    1 064
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 064
    Points : 1 402
    Points
    1 402
    Par défaut
    effectivement, après plusieurs tests, le rendu de Label correspond à celui de mon éditeur de texte ...

  12. #12
    Expert confirmé 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
    Points : 4 005
    Points
    4 005
    Par défaut
    Bonsoir,

    Petite question pour houma2001 quand même.

    Si vous dites:
    je voudrai savoir s'il ya un moyen de connaitre la taille en pixels d'une chaine de charactere.
    C'est que vous utilisez un GUI (Tkinter, wxPython, pyGTK, ou pyQt) et ils ont tous, c'est un minimum, une relation avec le Windows Manager (Windows, KDE, Gnome, etc...) qui leurs permettent d'avoir ce genre d'information (la place prise à l'écran).
    A partir de là la solution est adaptable.
    D’où ma question: Quel GUI utilisez vous ?

    @+

  13. #13
    Membre du Club
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2012
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Janvier 2012
    Messages : 50
    Points : 45
    Points
    45
    Par défaut
    je travaille actuellement avec tkinter et tix mais j'aimerai bien chager.
    pyqt ou pygtk ça serai mieux

  14. #14
    Expert confirmé 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
    Points : 4 005
    Points
    4 005
    Par défaut
    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
    # Tkinter
    import sys
    if sys.version_info[0] > 2:
        from tkinter import Label
    else:
        from Tkinter import Label
     
    e = Label(text="AZWYMM", bd=0, highlightthickness=0, padx=0, pady=0, font=("Sans Serif", "12", "bold"))
    print("Tkinter Label", e.winfo_reqwidth(), e.winfo_reqheight())
     
    # PyQt
    from PyQt4 import QtGui, QtCore
    import sys
     
    app = QtGui.QApplication(sys.argv)
    label = QtGui.QLabel("AZWYMM", None)
    label.setFont(QtGui.QFont("Sans Serif", 12, QtGui.QFont.Bold))
    print("PyQt QtLabel", label.minimumSizeHint())
     
    # pygtk
    import pygtk
    pygtk.require('2.0')
    import gtk
    import pango
     
    # Sans tenir compte du RuntimeWarning ^^
    window = gtk.Window(gtk.WINDOW_TOPLEVEL)
    label = gtk.Label("AZWYMM")
    label.modify_font(pango.FontDescription("sans bold 12"))
    window.add(label)
    print("pygtk gtk.Label", label.size_request())
     
    # wxpython
    import wx
    app = wx.App(False)
    frame = wx.Frame(None, wx.ID_ANY)
    font = wx.Font(12, wx.NORMAL, wx.NORMAL, wx.BOLD, False, u'Sans Serif')
    label = wx.StaticText(frame, -1, "AZWYMM")
    label.SetFont(font)
    print("wxpython", label.Size)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    ('Tkinter Label', 86, 19)
    ('PyQt QtLabel', PyQt4.QtCore.QSize(86, 19))
    ('pygtk gtk.Label', (86, 19))
    ('wxpython', wx.Size(87, 19))
    @+

    Edit pour éviter le RuntimeWarning
    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
    # pygtk
    import pygtk
    pygtk.require('2.0')
    import gtk
    import pango
     
    window = gtk.Window(gtk.WINDOW_TOPLEVEL)
    label = gtk.Label("AZWYMM")
    label.modify_font(pango.FontDescription("sans bold 12"))
    window.add(label)
    print("pygtk gtk.Label", label.size_request())
     
    # Tkinter
    import sys
    if sys.version_info[0] > 2:
        from tkinter import Label
    else:
        from Tkinter import Label
     
    e = Label(text="AZWYMM", bd=0, highlightthickness=0, padx=0, pady=0, font=("Sans Serif", "12", "bold"))
    print("Tkinter Label", e.winfo_reqwidth(), e.winfo_reqheight())
     
    # PyQt
    from PyQt4 import QtGui, QtCore
    import sys
     
    app = QtGui.QApplication(sys.argv)
    label = QtGui.QLabel("AZWYMM", None)
    label.setFont(QtGui.QFont("Sans Serif", 12, QtGui.QFont.Bold))
    print("PyQt QtLabel", label.minimumSizeHint())
     
    # wxpython
    import wx
    app = wx.App(False)
    frame = wx.Frame(None, wx.ID_ANY)
    font = wx.Font(12, wx.NORMAL, wx.NORMAL, wx.BOLD, False, u'Sans Serif')
    label = wx.StaticText(frame, -1, "AZWYMM")
    label.SetFont(font)
    print("wxpython", label.Size)
    # +1 pixel ? Ou ?

  15. #15
    Expert confirmé 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
    Points : 4 005
    Points
    4 005
    Par défaut
    A quoi cela va-t-il servir ?

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

Discussions similaires

  1. Taille en pixel d'une chaine et scaling
    Par bpy1401 dans le forum 2D
    Réponses: 0
    Dernier message: 04/02/2010, 10h14
  2. Ajouter une donnee a une chaine de charactere
    Par ben_118 dans le forum C++
    Réponses: 4
    Dernier message: 14/09/2006, 18h53
  3. decomposition d'une chaine de characteres
    Par graphicsxp dans le forum Général JavaScript
    Réponses: 10
    Dernier message: 23/06/2006, 10h51
  4. chercher une chaine de charactere
    Par meddeb2001 dans le forum Access
    Réponses: 3
    Dernier message: 15/06/2006, 14h11
  5. Quelle taille en pixels pour une animation d'un site web?
    Par ned-flanders dans le forum Flash
    Réponses: 6
    Dernier message: 06/10/2005, 12h26

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