Partage
  • Partager sur Facebook
  • Partager sur Twitter

Texte en gras sur tkinter sqlite

Sujet résolu
    4 avril 2021 à 9:35:22

    Bonjour à tous,

    J'ai crée un interface me permettant de gérer une base de données à l'aide de tkinter et sqlite.

    Je souhaite crée un bouton permettant à l'utilisateur de mettre certaines données en gras, en italique et de l'afficher dans l'interface...Puis d'enregistrer ces données dans ma base de données.

    Voici un exemple :

    Je ne sais pas si c'est possible ? Puisque parfois ça peut être qu'un bout de texte en gras .. ??? Et le texte à définir en gras est différent d'une entrée à une autre

    Merci d'avance

    • Partager sur Facebook
    • Partager sur Twitter
      4 avril 2021 à 11:29:31

      A priori 2 problèmes: comment rendre compte dans la base de données qu'une partie du texte est en gras l'autre non et le deuxième est le rendu à l'écran.

      Difficile d'utiliser autre chose qu'un widget Text pour pouvoir afficher avec du gras/souligné/... sur des parties du texte.... mais il y a un boulot (de codage) conséquent pour afficher un tableau avec (mais il y a peut être des codes qui trainent sur Internet pour ne pas tout inventer).

      • Partager sur Facebook
      • Partager sur Twitter
        4 avril 2021 à 13:09:07

        Bonjour,

        Merci pour votre réponse. Mais je ne comprends pas très bien. Pour afficher ma base de donnée sur mon interface (tkinter) j'utilise le module Treeview. J'ai vu plusieurs codes sur internet de personnes utilisant le html pour mettre en gras certaines données. Mais le problème c'est qu'ils spécifient la donnée qui doit être en gras dans le code. Et ils utilisent une ligne de code pour chaque donnée qui doit être en gras. J'ai plusieurs centaines données à mettre en gras et l'utilisateur va se servir de l'interface pour ajouter de nouvelles données donc je pense pas que c'est une bonne idée....

        Je ne comprends pas comment ajouter un widget Text dans mon Treeview...Je ne sais pas si ce sera esthétique ...???

        • Partager sur Facebook
        • Partager sur Twitter
          4 avril 2021 à 14:30:18

          Vous n'aviez pas précisé le widget utilisé pour afficher les données.

          Avec Treeview, si une colonne contient "France, Marseille", on va pouvoir tout mettre en gras mais pas le bout "Marseille" tout seul. A ma connaissance, seul le widget Text permet de faire çà (au niveau de différents caractères).

          Çà c'est la partie "rendu" à l'écran.

          HTML, serait pour la partie "rendu" côté texte dit autrement l'écriture "France, <b>Marseille</b>" pourrait signifier que quand du texte est encadré par la balise b, il faut l'afficher en gras/bold (mais on peut imaginer faire çà autrement).

          Entre les 2 il y a le code qui lisant"France, <b>Marseille</b>"peut tout balancer au widget qui s'en débrouille ou devra découper la chaine de caractères pour explicitement traduire affiche "France," en normal, puis "Marseille" en gras.

          Il n'est pas trop compliqué d'afficher du HTML (simple) avec le widget Text mais les possibilité de rendu de HTML dans le texte affiché par les autres widgets est inexistante (si c'était possible ce serait documenté).

          D'autres GUI (comme Qt) supportent ce genre de fonctionnalités.

          • Partager sur Facebook
          • Partager sur Twitter
            4 avril 2021 à 14:41:09

            Merci, du coup comme je le pensais c'est pas possible de le faire avec une Treeview ?
            • Partager sur Facebook
            • Partager sur Twitter
              4 avril 2021 à 15:29:01

              Si c'était possible, ce serait documenté et on trouverait des exemples de code.

              Après est ce qu'on peut faire quelque chose dans le genre avec tkinter... probablement avec le widget Text (mais il y a du boulot).

              • Partager sur Facebook
              • Partager sur Twitter
                5 avril 2021 à 9:36:06

                Bonjour,

                Merci pour votre réponse. Je vais essayer de chercher avec le widget Text du coup

                • Partager sur Facebook
                • Partager sur Twitter
                  8 avril 2021 à 8:29:54

                  Bonjour,

                  J'ai essayé une autre méthode. Cette fois je me suis crée un Text entry dans lequel le texte apparaitra en gras. Le texte qui sera contenu dans l'entry sera récupéré grâce aux variables a et b. Ce qui doit être en gras est la variable b (qui est en fait une partie de a d'où la fonction replace). Toutefois, je n'arrive pas à passer cette variable en gras pour pouvoir ensuite l'insérer dans mon texte. Avez vous des idées?

                  Voici mon code

                  Merci

                  -
                  Edité par Mao1236 11 avril 2021 à 11:25:26

                  • Partager sur Facebook
                  • Partager sur Twitter
                  Anonyme
                    8 avril 2021 à 10:33:23

                    Bonjour,

                    Voilà un exemple que tu peux facilement adapter à ton script :

                    import tkinter as tk
                    from tkinter.font import Font
                    
                    def find_word(word):
                        text_widget.tag_remove("bold", "1.0", tk.END) 
                        index = "1.0"
                        while True:
                                index = text_widget.search(word, index, stopindex=tk.END) 
                                if not index:
                                    break
                                lastindex = f"{index}+{len(word)}c"
                                text_widget.tag_add("bold", index, lastindex) 
                                index = lastindex
                                text_widget.tag_configure("bold", font=Font(weight="bold"))
                    
                    
                    root = tk.Tk()
                    text_widget = tk.Text(root, height=2, width=30)
                    text_widget.pack()
                    text_widget.insert(tk.END, "Just a text Widget\nin two lines\n")
                    
                    find_word("two")
                    
                    tk.mainloop()







                    -
                    Edité par Anonyme 8 avril 2021 à 10:47:38

                    • Partager sur Facebook
                    • Partager sur Twitter
                      8 avril 2021 à 12:47:04

                      le contenu d'un variable string ne peut pas être mise en gras a proprement parlé, c'est une propriété de mise en forme, la solution dans un widget Text c'est avec les tags comme l'exemple de Diablo76.

                      ça ne répond pas à la question mais avec un print, on peut utiliser des caractères spéciaux (https://stackoverflow.com/questions/8924173/how-do-i-print-bold-text-in-python )

                      class color:
                         PURPLE = '\033[95m'
                         CYAN = '\033[96m'
                         DARKCYAN = '\033[36m'
                         BLUE = '\033[94m'
                         GREEN = '\033[92m'
                         YELLOW = '\033[93m'
                         RED = '\033[91m'
                         BOLD = '\033[1m'
                         UNDERLINE = '\033[4m'
                         END = '\033[0m'
                      
                      print(color.BOLD + 'Hello World !' + color.END)


                      Si tu veux enregistré la mise en forme dans la base, ce n'est pas possible, il faudra ajouter un système de balises (html, Bcc ou autre) au texte qu'il faudra interpréter à la lecture et ajouter à l'écriture (comme l'a dit mps).

                      • Partager sur Facebook
                      • Partager sur Twitter
                        11 avril 2021 à 10:00:15

                        Merci beaucoup pour votre réponse ! J'ai vu ce sujet mais en essayant je n'ai pas réussi c'est pourquoi j'ai choisi l'autre méthode même si elle bug un peu.

                        Merci pour toutes vos réponses

                        • Partager sur Facebook
                        • Partager sur Twitter
                        Anonyme
                          11 avril 2021 à 10:43:18

                          Slt,

                          Quelle partie du code bug ?

                          • Partager sur Facebook
                          • Partager sur Twitter
                            11 avril 2021 à 11:12:35

                            Bonjour,

                            Le code en soit ne bug pas (je pense). J'ai bien le résultat le texte voulu en gras et le reste normal. Le code bug lorsque je clique sur deux ou trois lignes de ma Treeview à la suite (pour récupérer mes données dans mes widgets Text). Lorsque je clique sur une ligne, ça va il ne se passe rien et je récupère mes données de la bonne façon. Mais lorsque j'enchaine et je clique sur plusieurs lignes à la suite, le programme se fige et j'ai un message m'indiquant que python s'est fermé. J'ai l'impression qu'il a besoin de temps pour bien s'exécuter?

                            Ou comme j'ai beaucoup de ligne de code ça bug? Pourtant avant de créer cette fonction mon programme fonctionnait correctement

                            • Partager sur Facebook
                            • Partager sur Twitter

                            Texte en gras sur tkinter sqlite

                            × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                            × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                            • Editeur
                            • Markdown