J'écris un petit utilitaire en Python qui fait un peu de correspondance de modèle de texte. Le texte correspondant au motif saisi par l'utilisateur est surligné en jaune. J'y parviens en utilisant un widget Tkinter Text
, et en mettant en place un tag sur le widget Texte nommé "match"
qui donne un texte avec le nom de tag "match"
un fond jaune.Comment supprimer la couleur d'arrière-plan du texte lors de la mise en évidence?
Tout cela a l'air bien, sauf lorsque j'essaie de mettre le texte en surbrillance à l'aide de la souris (par exemple lorsque je veux copier/coller). Lorsque je sélectionne le texte à l'aide de la souris, tout texte balisé contenant déjà un arrière-plan jaune conserve son arrière-plan jaune, même après avoir été mis en surbrillance. Cela signifie que vous ne pouvez pas lire correctement le texte lorsqu'il a été mis en évidence par la souris, car le texte blanc (le texte devient blanc lorsqu'il est mis en surbrillance par la souris) sur un arrière-plan jaune produit un mauvais contraste. Ce que je voudrais arriver, c'est que, lorsque je sélectionne le texte dans le widget Texte à l'aide de la souris, tout le texte obtient la couleur de fond/couleur blanche standard que vous obtiendriez normalement sur une machine Windows en mettant en évidence une section de texte.
Voici un extrait de code rapide pour démontrer ce que je veux dire:
from tkinter import *
root = Tk()
w = Text(root)
w.tag_config("match",background="yellow")
w.config(highlightbackground="red")
w.pack()
w.insert(INSERT,"some non-matching text.")
w.insert(INSERT,"some matching text.","match")
root.mainloop()
Si vous exécutez ce, puis mettre en évidence tout le texte dans le widget texte, vous verrez que le texte avec le fond jaune devient très difficile à lire.
Notez que dans l'extrait de code ci-dessus, je l'ai essayé de changer la couleur de fond de surbrillance à l'aide:
w.config(highlightbackground="red")
Mais cela n'a pas fonctionné.
Alors que ce que vous écrivez est techniquement correct, il fera l'OP absolument pas bon s'il met en évidence highlightbackground au lieu de selectbackground (fondamentalement, vous avez besoin de cette réponse _plus_ le premier paragraphe de la mienne ;-). –
Vous avez tort. Ma solution résout son problème avec ou sans configuration du highlightbackground ou du selectbackground. Je pense que vous m'avez voté simplement parce que je vous ai voté. La différence est, ma solution fonctionne votre non-solution ne fonctionne pas. –
Je dois être d'accord avec Bryan - l'utilisation de w.tag_raise ("sel") est tout ce qui était nécessaire pour l'exemple que j'ai fourni dans la question originale. –