Consider the response modification of @ekhumoro, as shown below.
There mplayer, built in QWidget . Now I want to put some text over the video. But my approach below does not work (the background of the shortcut is not transparent, so you only see video and text). Any idea to fix it?
In more general terms: how to make a transparent label on custom widgets (in my case mplayer widget)?
If you can not achieve exactly what I want, it would be enough to have something that just shows freezes the last frame of the video (or a pre-defined frame), and displays the text above it.
Note that at a later stage, I want a text that imposes a video varies with time, so the decision must bear this in mind already.
As for transparency, it may be important to note that I use the environment linux, and it should work in xmonad .
import mpylayer from PyQt4 import QtGui, QtCore class Window(QtGui.QWidget): def __init__(self): QtGui.QWidget.__init__(self) self.container = QtGui.QWidget(self) ) import mpylayer from PyQt4 import QtGui, QtCore class Window(QtGui.QWidget): def __init__(self): QtGui.QWidget.__init__(self) self.container = QtGui.QWidget(self) self) import mpylayer from PyQt4 import QtGui, QtCore class Window(QtGui.QWidget): def __init__(self): QtGui.QWidget.__init__(self) self.container = QtGui.QWidget(self) , str (self.container.winId ())]) import mpylayer from PyQt4 import QtGui, QtCore class Window(QtGui.QWidget): def __init__(self): QtGui.QWidget.__init__(self) self.container = QtGui.QWidget(self) n and more', self) import mpylayer from PyQt4 import QtGui, QtCore class Window(QtGui.QWidget): def __init__(self): QtGui.QWidget.__init__(self) self.container = QtGui.QWidget(self) : 100px; opacity: 0.5}") import mpylayer from PyQt4 import QtGui, QtCore class Window(QtGui.QWidget): def __init__(self): QtGui.QWidget.__init__(self) self.container = QtGui.QWidget(self)
Here's a screenshot of what it looks like my non-business approach:

That's what I want to forge using gimp (maybe I should have used the font color red, but it should be simple css):

Edit Here is how I tried to adapt X.Jacobs to my example. However, this will not work. Only if I change the size of the window, overlay text / strings are displayed for just a millisecond of the video, and then disappear again (in both cases, if the video is running and suspended).
import mpylayer from PyQt4 import QtGui, QtCore class overlayLabel(QtGui.QLabel): def __init__(self, parent=None): super(overlayLabel, self).__init__(parent) self.setAlignment(QtCore.Qt.AlignHCenter|QtCore.Qt.AlignVCenter) self.setText("OVERLAY TEXT") self.setStyleSheet("QLabel {font-size: 100px;}") self.setGeometry(200,200,900,300) class overlay(QtGui.QWidget): def __init__(self, parent=None): super(overlay, self).__init__(parent) palette = QtGui.QPalette(self.palette()) palette.setColor(palette.Background, QtCore.Qt.transparent) self.setPalette(palette) def paintEvent(self, event): painter = QtGui.QPainter() painter.begin(self) painter.setRenderHint(QtGui.QPainter.Antialiasing) painter.fillRect(event.rect(), QtGui.QBrush(QtGui.QColor(255, 255, 255, 27))) painter.drawLine(self.width()/8, self.height()/8, 7*self.width()/8, 7*self.height()/8) painter.drawLine(self.width()/8, 7*self.height()/8, 7*self.width()/8, self.height()/8) painter.setPen(QtGui.QPen(QtCore.Qt.NoPen)) class Window(QtGui.QWidget): def __init__(self): QtGui.QWidget.__init__(self) self.container = QtGui.QWidget(self) #self.container.setStyleSheet('background: black') self.button = QtGui.QPushButton('Open', self) self.button.clicked.connect(self.handleButton) self.layout = QtGui.QVBoxLayout(self) self.layout.addWidget(self.button) self.layout.addWidget(self.container) self.mplayer = mpylayer.MPlayerControl( 'mplayer', ['-wid', str(self.container.winId())]) ## Both versions don't work: #self.label = overlay(self.container) self.label = overlayLabel(self.container) def handleButton(self): path = QtGui.QFileDialog.getOpenFileName() if not path.isEmpty(): self.mplayer.loadfile(unicode(path)) if __name__ == '__main__': import sys app = QtGui.QApplication(sys.argv) window = Window() window.resize(640, 480) window.show() sys.exit(app.exec_()) __ (parent) import mpylayer from PyQt4 import QtGui, QtCore class overlayLabel(QtGui.QLabel): def __init__(self, parent=None): super(overlayLabel, self).__init__(parent) self.setAlignment(QtCore.Qt.AlignHCenter|QtCore.Qt.AlignVCenter) self.setText("OVERLAY TEXT") self.setStyleSheet("QLabel {font-size: 100px;}") self.setGeometry(200,200,900,300) class overlay(QtGui.QWidget): def __init__(self, parent=None): super(overlay, self).__init__(parent) palette = QtGui.QPalette(self.palette()) palette.setColor(palette.Background, QtCore.Qt.transparent) self.setPalette(palette) def paintEvent(self, event): painter = QtGui.QPainter() painter.begin(self) painter.setRenderHint(QtGui.QPainter.Antialiasing) painter.fillRect(event.rect(), QtGui.QBrush(QtGui.QColor(255, 255, 255, 27))) painter.drawLine(self.width()/8, self.height()/8, 7*self.width()/8, 7*self.height()/8) painter.drawLine(self.width()/8, 7*self.height()/8, 7*self.width()/8, self.height()/8) painter.setPen(QtGui.QPen(QtCore.Qt.NoPen)) class Window(QtGui.QWidget): def __init__(self): QtGui.QWidget.__init__(self) self.container = QtGui.QWidget(self) #self.container.setStyleSheet('background: black') self.button = QtGui.QPushButton('Open', self) self.button.clicked.connect(self.handleButton) self.layout = QtGui.QVBoxLayout(self) self.layout.addWidget(self.button) self.layout.addWidget(self.container) self.mplayer = mpylayer.MPlayerControl( 'mplayer', ['-wid', str(self.container.winId())]) ## Both versions don't work: #self.label = overlay(self.container) self.label = overlayLabel(self.container) def handleButton(self): path = QtGui.QFileDialog.getOpenFileName() if not path.isEmpty(): self.mplayer.loadfile(unicode(path)) if __name__ == '__main__': import sys app = QtGui.QApplication(sys.argv) window = Window() window.resize(640, 480) window.show() sys.exit(app.exec_()) : 100px;}") import mpylayer from PyQt4 import QtGui, QtCore class overlayLabel(QtGui.QLabel): def __init__(self, parent=None): super(overlayLabel, self).__init__(parent) self.setAlignment(QtCore.Qt.AlignHCenter|QtCore.Qt.AlignVCenter) self.setText("OVERLAY TEXT") self.setStyleSheet("QLabel {font-size: 100px;}") self.setGeometry(200,200,900,300) class overlay(QtGui.QWidget): def __init__(self, parent=None): super(overlay, self).__init__(parent) palette = QtGui.QPalette(self.palette()) palette.setColor(palette.Background, QtCore.Qt.transparent) self.setPalette(palette) def paintEvent(self, event): painter = QtGui.QPainter() painter.begin(self) painter.setRenderHint(QtGui.QPainter.Antialiasing) painter.fillRect(event.rect(), QtGui.QBrush(QtGui.QColor(255, 255, 255, 27))) painter.drawLine(self.width()/8, self.height()/8, 7*self.width()/8, 7*self.height()/8) painter.drawLine(self.width()/8, 7*self.height()/8, 7*self.width()/8, self.height()/8) painter.setPen(QtGui.QPen(QtCore.Qt.NoPen)) class Window(QtGui.QWidget): def __init__(self): QtGui.QWidget.__init__(self) self.container = QtGui.QWidget(self) #self.container.setStyleSheet('background: black') self.button = QtGui.QPushButton('Open', self) self.button.clicked.connect(self.handleButton) self.layout = QtGui.QVBoxLayout(self) self.layout.addWidget(self.button) self.layout.addWidget(self.container) self.mplayer = mpylayer.MPlayerControl( 'mplayer', ['-wid', str(self.container.winId())]) ## Both versions don't work: #self.label = overlay(self.container) self.label = overlayLabel(self.container) def handleButton(self): path = QtGui.QFileDialog.getOpenFileName() if not path.isEmpty(): self.mplayer.loadfile(unicode(path)) if __name__ == '__main__': import sys app = QtGui.QApplication(sys.argv) window = Window() window.resize(640, 480) window.show() sys.exit(app.exec_()) __ (parent) import mpylayer from PyQt4 import QtGui, QtCore class overlayLabel(QtGui.QLabel): def __init__(self, parent=None): super(overlayLabel, self).__init__(parent) self.setAlignment(QtCore.Qt.AlignHCenter|QtCore.Qt.AlignVCenter) self.setText("OVERLAY TEXT") self.setStyleSheet("QLabel {font-size: 100px;}") self.setGeometry(200,200,900,300) class overlay(QtGui.QWidget): def __init__(self, parent=None): super(overlay, self).__init__(parent) palette = QtGui.QPalette(self.palette()) palette.setColor(palette.Background, QtCore.Qt.transparent) self.setPalette(palette) def paintEvent(self, event): painter = QtGui.QPainter() painter.begin(self) painter.setRenderHint(QtGui.QPainter.Antialiasing) painter.fillRect(event.rect(), QtGui.QBrush(QtGui.QColor(255, 255, 255, 27))) painter.drawLine(self.width()/8, self.height()/8, 7*self.width()/8, 7*self.height()/8) painter.drawLine(self.width()/8, 7*self.height()/8, 7*self.width()/8, self.height()/8) painter.setPen(QtGui.QPen(QtCore.Qt.NoPen)) class Window(QtGui.QWidget): def __init__(self): QtGui.QWidget.__init__(self) self.container = QtGui.QWidget(self) #self.container.setStyleSheet('background: black') self.button = QtGui.QPushButton('Open', self) self.button.clicked.connect(self.handleButton) self.layout = QtGui.QVBoxLayout(self) self.layout.addWidget(self.button) self.layout.addWidget(self.container) self.mplayer = mpylayer.MPlayerControl( 'mplayer', ['-wid', str(self.container.winId())]) ## Both versions don't work: #self.label = overlay(self.container) self.label = overlayLabel(self.container) def handleButton(self): path = QtGui.QFileDialog.getOpenFileName() if not path.isEmpty(): self.mplayer.loadfile(unicode(path)) if __name__ == '__main__': import sys app = QtGui.QApplication(sys.argv) window = Window() window.resize(640, 480) window.show() sys.exit(app.exec_()) ) import mpylayer from PyQt4 import QtGui, QtCore class overlayLabel(QtGui.QLabel): def __init__(self, parent=None): super(overlayLabel, self).__init__(parent) self.setAlignment(QtCore.Qt.AlignHCenter|QtCore.Qt.AlignVCenter) self.setText("OVERLAY TEXT") self.setStyleSheet("QLabel {font-size: 100px;}") self.setGeometry(200,200,900,300) class overlay(QtGui.QWidget): def __init__(self, parent=None): super(overlay, self).__init__(parent) palette = QtGui.QPalette(self.palette()) palette.setColor(palette.Background, QtCore.Qt.transparent) self.setPalette(palette) def paintEvent(self, event): painter = QtGui.QPainter() painter.begin(self) painter.setRenderHint(QtGui.QPainter.Antialiasing) painter.fillRect(event.rect(), QtGui.QBrush(QtGui.QColor(255, 255, 255, 27))) painter.drawLine(self.width()/8, self.height()/8, 7*self.width()/8, 7*self.height()/8) painter.drawLine(self.width()/8, 7*self.height()/8, 7*self.width()/8, self.height()/8) painter.setPen(QtGui.QPen(QtCore.Qt.NoPen)) class Window(QtGui.QWidget): def __init__(self): QtGui.QWidget.__init__(self) self.container = QtGui.QWidget(self) #self.container.setStyleSheet('background: black') self.button = QtGui.QPushButton('Open', self) self.button.clicked.connect(self.handleButton) self.layout = QtGui.QVBoxLayout(self) self.layout.addWidget(self.button) self.layout.addWidget(self.container) self.mplayer = mpylayer.MPlayerControl( 'mplayer', ['-wid', str(self.container.winId())]) ## Both versions don't work: #self.label = overlay(self.container) self.label = overlayLabel(self.container) def handleButton(self): path = QtGui.QFileDialog.getOpenFileName() if not path.isEmpty(): self.mplayer.loadfile(unicode(path)) if __name__ == '__main__': import sys app = QtGui.QApplication(sys.argv) window = Window() window.resize(640, 480) window.show() sys.exit(app.exec_()) self) import mpylayer from PyQt4 import QtGui, QtCore class overlayLabel(QtGui.QLabel): def __init__(self, parent=None): super(overlayLabel, self).__init__(parent) self.setAlignment(QtCore.Qt.AlignHCenter|QtCore.Qt.AlignVCenter) self.setText("OVERLAY TEXT") self.setStyleSheet("QLabel {font-size: 100px;}") self.setGeometry(200,200,900,300) class overlay(QtGui.QWidget): def __init__(self, parent=None): super(overlay, self).__init__(parent) palette = QtGui.QPalette(self.palette()) palette.setColor(palette.Background, QtCore.Qt.transparent) self.setPalette(palette) def paintEvent(self, event): painter = QtGui.QPainter() painter.begin(self) painter.setRenderHint(QtGui.QPainter.Antialiasing) painter.fillRect(event.rect(), QtGui.QBrush(QtGui.QColor(255, 255, 255, 27))) painter.drawLine(self.width()/8, self.height()/8, 7*self.width()/8, 7*self.height()/8) painter.drawLine(self.width()/8, 7*self.height()/8, 7*self.width()/8, self.height()/8) painter.setPen(QtGui.QPen(QtCore.Qt.NoPen)) class Window(QtGui.QWidget): def __init__(self): QtGui.QWidget.__init__(self) self.container = QtGui.QWidget(self) #self.container.setStyleSheet('background: black') self.button = QtGui.QPushButton('Open', self) self.button.clicked.connect(self.handleButton) self.layout = QtGui.QVBoxLayout(self) self.layout.addWidget(self.button) self.layout.addWidget(self.container) self.mplayer = mpylayer.MPlayerControl( 'mplayer', ['-wid', str(self.container.winId())]) ## Both versions don't work: #self.label = overlay(self.container) self.label = overlayLabel(self.container) def handleButton(self): path = QtGui.QFileDialog.getOpenFileName() if not path.isEmpty(): self.mplayer.loadfile(unicode(path)) if __name__ == '__main__': import sys app = QtGui.QApplication(sys.argv) window = Window() window.resize(640, 480) window.show() sys.exit(app.exec_()) , str (self.container.winId ())]) import mpylayer from PyQt4 import QtGui, QtCore class overlayLabel(QtGui.QLabel): def __init__(self, parent=None): super(overlayLabel, self).__init__(parent) self.setAlignment(QtCore.Qt.AlignHCenter|QtCore.Qt.AlignVCenter) self.setText("OVERLAY TEXT") self.setStyleSheet("QLabel {font-size: 100px;}") self.setGeometry(200,200,900,300) class overlay(QtGui.QWidget): def __init__(self, parent=None): super(overlay, self).__init__(parent) palette = QtGui.QPalette(self.palette()) palette.setColor(palette.Background, QtCore.Qt.transparent) self.setPalette(palette) def paintEvent(self, event): painter = QtGui.QPainter() painter.begin(self) painter.setRenderHint(QtGui.QPainter.Antialiasing) painter.fillRect(event.rect(), QtGui.QBrush(QtGui.QColor(255, 255, 255, 27))) painter.drawLine(self.width()/8, self.height()/8, 7*self.width()/8, 7*self.height()/8) painter.drawLine(self.width()/8, 7*self.height()/8, 7*self.width()/8, self.height()/8) painter.setPen(QtGui.QPen(QtCore.Qt.NoPen)) class Window(QtGui.QWidget): def __init__(self): QtGui.QWidget.__init__(self) self.container = QtGui.QWidget(self) #self.container.setStyleSheet('background: black') self.button = QtGui.QPushButton('Open', self) self.button.clicked.connect(self.handleButton) self.layout = QtGui.QVBoxLayout(self) self.layout.addWidget(self.button) self.layout.addWidget(self.container) self.mplayer = mpylayer.MPlayerControl( 'mplayer', ['-wid', str(self.container.winId())]) ## Both versions don't work: #self.label = overlay(self.container) self.label = overlayLabel(self.container) def handleButton(self): path = QtGui.QFileDialog.getOpenFileName() if not path.isEmpty(): self.mplayer.loadfile(unicode(path)) if __name__ == '__main__': import sys app = QtGui.QApplication(sys.argv) window = Window() window.resize(640, 480) window.show() sys.exit(app.exec_())