Il semble peu probable que QTextEdit
soutiendrait tout aussi sophistiqué que le formatage en couches. Donc je pense que vous devrez faire le mélange des couleurs vous-même. L'exemple ci-dessous utilise une méthode assez grossière, mais cela semble fonctionner. Je ne sais pas exactement ce que les résultats que vous visez, mais il devrait vous donner une idée comment proceeed:
import sys
from random import sample
from PySide import QtCore, QtGui
class Window(QtGui.QWidget):
def __init__(self):
super(Window, self).__init__()
self.button = QtGui.QPushButton('Highlight', self)
self.button.clicked.connect(self.handleButton)
self.edit = QtGui.QTextEdit(self)
self.edit.setText(open(__file__).read())
layout = QtGui.QVBoxLayout(self)
layout.addWidget(self.edit)
layout.addWidget(self.button)
def blendColors(self, first, second, ratio=0.5, alpha=100):
ratio2 = 1 - ratio
return QtGui.QColor(
(first.red() * ratio) + (second.red() * ratio2),
(first.green() * ratio) + (second.green() * ratio2),
(first.blue() * ratio) + (second.blue() * ratio2),
alpha,
)
def handleButton(self):
cursor = self.edit.textCursor()
start = cursor.selectionStart()
end = cursor.selectionEnd()
if start != end:
default = QtGui.QTextCharFormat().background().color()
color = QtGui.QColor(*sample(range(0, 255), 3))
color.setAlpha(100)
for pos in range(start, end):
cursor.setPosition(pos)
cursor.movePosition(QtGui.QTextCursor.NextCharacter,
QtGui.QTextCursor.KeepAnchor)
charfmt = cursor.charFormat()
current = charfmt.background().color()
if current != default:
charfmt.setBackground(self.blendColors(current, color))
else:
charfmt.setBackground(color)
cursor.setCharFormat(charfmt)
cursor.clearSelection()
self.edit.setTextCursor(cursor)
if __name__ == '__main__':
app = QtGui.QApplication(sys.argv)
window = Window()
window.setGeometry(800, 100, 600, 500)
window.show()
sys.exit(app.exec_())
(PS: une chose que je ne l'ai pas essayé de mettre en œuvre ici est enlever Faits saillants Si vous avez utilisé un jeu de couleurs relativement petit, je suppose que vous pouvez pré-calculer une table de toutes les combinaisons de couleurs, puis utiliser une clé de (current_color, removed_color)
pour rechercher la couleur "soustraite" requise.
merci. Votre code résout le problème d'affichage. Je suis inquiet de la complexité de l'ajout et de la suppression des faits saillants. Alpha dans le textEdit implique une sorte de superposition, correct? Que peut-on stratifier? Existe-t-il un widget Qt en plus de textEdit qui pourrait fournir la superposition de points forts spécifiquement? – davideps
Une table de consultation est à peu près aussi simple et efficace que possible. Il n'y a pas de superposition il n'y a que la peinture de fond. Je suppose que le framework graphique offre plus de possibilités, mais il semble que ce soit une solution lourde pour quelque chose d'aussi basique. – ekhumoro
J'ai continué à essayer de faire fonctionner alpha. Dans la fenêtre QTextEdit, setAlpha semble fonctionner plus comme un paramètre de saturation que la vraie transparence. Votre réponse semble être le seul spectacle en ville. Je vous remercie. – davideps