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 :

Text/tag limite atteinte?


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
    881
    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 : 881
    Points : 1 544
    Points
    1 544
    Billets dans le blog
    4
    Par défaut Text/tag limite atteinte?
    Bonjour,
    J'ai la fenêtre du programme suivant qui se ferme au 238 eme tags.
    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
    import time
    import tkinter as tk
    import tkinter.font as tkfont
     
    root = tk.Tk()
    frame = tk.LabelFrame(root, text="Polices")
    frame.grid()
    ft = tkfont.families()
    txt = tk.Text(frame, width=50, height=20)
    txt.grid()
    ascenseur_txt = tk.Scrollbar(root, orient='vertical',
                                          width=20,  command=txt.yview)
    ascenseur_txt.grid(row= 0, column= 1,sticky='ns')
    txt["yscrollcommand"]= ascenseur_txt.set
    deltY=10
    txt.insert("1.0", 'Polices:\n')
    txt.tag_add("tagpolices", "1.0", "insert")
    liste = ["tagpolices"]
    police={}
     
    for i,f in enumerate(ft):
        police[i] = tkfont.Font(frame, size=20, family=f)
        txt.insert("end", f+"\n")
        ancien_tag = liste[::].pop()
        txt.tag_add("tag"+str(i), ancien_tag+".last", "insert")
        liste.append("tag"+str(i))
        txt.tag_config("tag"+str(i), font=police[i])
        #txt.update_idletasks()
     
        #time.sleep(1/5)
     
    root.mainloop()
    Pourquoi? et comment arriver à afficher la totalité des polices possibles sur tkinter?

    Autre question:
    En ce qui concerne ma gestion des tags, j'imagine qu'il y a des façons plus direct de les assigner ... quelles seraient elles?

    Merci
    #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 781
    Points
    36 781
    Par défaut
    Salut,

    C'est quoi le sujet? Une limite sur le nombre de tags qu'on pourrait créer ou afficher les différentes polices de caractères?

    Votre code fonctionne (ne plante pas) chez moi.
    Après, bon, les tags sont un outil pour classifier des bouts de texte histoire d'appliquer quelque chose à l'ensemble de qu'ils définissent.
    C'est pas interdit d'imaginer avoir 300 boîtes de rangements mais sauf s'il s'agit de visseries et autres boulons/écrous, pour du texte, pas facile de sortir les critères de rangements dans un tiroir donné.

    Sinon je coderai çà comme çà:
    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
    import time
    import tkinter as tk
    import tkinter.font as tkfont
    from tkinter.scrolledtext import ScrolledText
     
    root = tk.Tk()
    frame = tk.LabelFrame(root, text="Polices")
    frame.grid()
    ft = tkfont.families()
    txt = ScrolledText(frame, width=50, height=20)
    txt.grid()
    ## ascenseur_txt = tk.Scrollbar(root, orient='vertical',
    ##                                       width=20,  command=txt.yview)
    ## ascenseur_txt.grid(row= 0, column= 1,sticky='ns')
    ## txt["yscrollcommand"]= ascenseur_txt.set
    ## deltY=10
    txt.insert("1.0", 'Polices:\n')
    txt.tag_add("tagpolices", "1.0", "insert")
    ## liste = ["tagpolices"]
    ## police={}
     
    for i,f in enumerate(ft):
        font = tkfont.Font(frame, size=20, family=f)
        tag = f'tag{i}'
        txt.tag_config(tag, font=font)
        txt.insert("end", f, tag, '\n')
        ## ancien_tag = liste[::].pop()
        ## txt.tag_add("tag"+str(i), ancien_tag+".last", "insert")
        ## liste.append("tag"+str(i))
        ## txt.tag_config("tag"+str(i), font=police[i])
        #txt.update_idletasks()
     
        #time.sleep(1/5)
     
    root.mainloop()
    - 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
    881
    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 : 881
    Points : 1 544
    Points
    1 544
    Billets dans le blog
    4
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    Salut,

    C'est quoi le sujet? Une limite sur le nombre de tags qu'on pourrait créer ou afficher les différentes polices de caractères?
    J'ai posté, car mon code (et le tien ) plante au-delà du 238 tag . D'où mon questionnement sur les limites éventuelles du nombre de tag.
    Si je l'exécute depuis un terminal shell bash , s'affiche :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    python3 BIDON.py 
    X Error of failed request:  BadLength (poly request too large or internal Xlib length error)
      Major opcode of failed request:  139 (RENDER)
      Minor opcode of failed request:  20 (RenderAddGlyphs)
      Serial number of failed request:  689
      Current serial number in output stream:  783
    Si je l'exécute depuis Idle:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    =============================== RESTART: Shell ===============================
    >>>
    Idem si j'exécute le code depuis une vm( ubuntu 18.04)

    ----------------------------
    Merci pour la réécriture du code, je me doutais bien que je me compliquai la vie ... Je découvre Text, et en lisant la doc je n'avais pas saisi que l'on pouvait taguer en 'direct' d'où mon approche alambiquée
    #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 781
    Points
    36 781
    Par défaut
    Salut,

    A priori: "X Error of failed request: BadLength (poly request too large or internal Xlib length error)" ressemble à une erreur remontée par le serveur X...

    Sur Windows, le programme fonctionne avec ~330 fonts.... Donc s'il y a une limite, ce n'est pas celle de TCL/Tk(tkinter) qui "bloque".
    A voir ce qui se raconte dans les forums Ubuntu sur le sujet.

    - 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
    881
    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 : 881
    Points : 1 544
    Points
    1 544
    Billets dans le blog
    4
    Par défaut
    D'accord. J'édite ce post en résolu et je vais de ce pas questionner le forum d'ubuntu.
    Merci pour ton aide
    #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
    881
    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 : 881
    Points : 1 544
    Points
    1 544
    Billets dans le blog
    4
    Par défaut
    Bonjour,
    La police qui génère le bug est : Noto Color Emoji

    Pour lister toutes les polices utilisables dans tkinter avec ubuntu/debian :
    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
    import tkinter as tk
    import tkinter.font as tkfont
    from tkinter.scrolledtext import ScrolledText
     
    root = tk.Tk()
    frame = tk.LabelFrame(root, text="Polices")
    frame.grid()
    ft = tkfont.families()
    txt = ScrolledText(frame, width=50, height=20)
    txt.grid()
     
    txt.insert("1.0", 'Polices:\n')
    txt.tag_add("tagpolices", "1.0", "insert")
     
    for i,f in enumerate(ft):
        if f == 'Noto Color Emoji':
            continue
     
        font = tkfont.Font(frame, size=20, family=f)
        tag = f'tag{i}'
        txt.tag_config(tag, font=font)
     
        txt.insert("end", f, tag, '\n')
        print(i)
    root.mainloop()
    #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. [eZ Publish] eZ Tags - Limiter choix pour les éditeurs
    Par somonflex dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 0
    Dernier message: 07/05/2012, 11h24
  2. [SP-2007] limite atteinte de la taille de BD à 4096 mo
    Par cdtkoenig dans le forum SharePoint
    Réponses: 4
    Dernier message: 28/09/2011, 21h27
  3. [Oracle 10g] redo.log limite atteinte
    Par falco- dans le forum Débuter
    Réponses: 3
    Dernier message: 18/11/2009, 09h40
  4. [Tableaux] Nuage de tags : limitations et tailles
    Par micatmidog dans le forum Langage
    Réponses: 3
    Dernier message: 04/06/2007, 23h56
  5. champ texte et limitation de decimale ?
    Par angelevil dans le forum Balisage (X)HTML et validation W3C
    Réponses: 3
    Dernier message: 10/03/2006, 21h53

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