I would have thought this would have been straight forward, but that has proven to be untrue. Im trying to make a Qlabel with text, and i want the text to have a border/outline around it. So red text with a yellow outline around the text.
Any help is appreciated. I have tried doing CSS with not sucess since apparently text-shadow does not work int Qt?
This is what I use for blur effect on a pixmap. Perhaps you can apply it to a label with QGraphicsDropShadowEffect instead. I only tried with pixmaps, so you might be able to get it to work without the graphics scene and the painter, as shown here:
https://wiki.qt.io/Text_Shadows_in_QLabel_Snippets
def blur(self, pixmap):
effect = QtWidgets.QGraphicsBlurEffect()
scene = QtWidgets.QGraphicsScene()
item = QtWidgets.QGraphicsPixmapItem(pixmap)
scene.addItem(item)
item.setGraphicsEffect(effect)
image = pixmap.toImage()
image.fill(QtCore.Qt.transparent)
painter = QtGui.QPainter(image)
scene.render(painter)
painter.end()
return QtGui.QPixmap(image)
Hmm, that might work, but the text that im going to be using it on is a currency display for the video poker app im making. So it would be updated over and over and over when someone wins credits, i want it to count up. So id have to pass the text into this before output? Am i thinking about that correctly?
You only need to apply the effect once. Here is an example made from the link above:
#!/usr/bin/python3
import sys
import os
from PyQt5 import QtCore, QtGui, QtWidgets
class Main(QtWidgets.QMainWindow):
def __init__(self, parent):
super().__init__()
self.ui = QtWidgets.QWidget(self)
self.ui.label = QtWidgets.QLabel()
self.ui.layout = QtWidgets.QVBoxLayout()
self.ui.layout.addWidget(self.ui.label)
self.ui.setLayout(self.ui.layout)
self._addShadowEffect(self.ui.label)
self.setCentralWidget(self.ui)
self.show()
self.scoreTimer = QtCore.QTimer(interval=200)
self.scoreTimer.timeout.connect(self._updateScore)
self.scoreTimer.start()
def _addShadowEffect(self, item):
effect = QtWidgets.QGraphicsDropShadowEffect()
effect.setBlurRadius(1)
effect.setColor(QtGui.QColor("red"))
effect.setOffset(1,1)
item.setGraphicsEffect(effect)
def _updateScore(self):
randomText = os.urandom(32).decode("latin1")
self.ui.label.setText(randomText)
if __name__== '__main__':
app = QtWidgets.QApplication([])
gui = Main(app)
sys.exit(app.exec_())
Hmm, thats very interesting. That may solve the issue. i appreciate it. Ill play with it tonight.