Overlay text on a specific widget (transparent labels) in pyqt4

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) #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())]) self.label = QtGui.QLabel('Some text\n and more',self) self.label.move(100,100) self.label.setGeometry(200,200,900,300) #This doesn't work self.label.setAttribute(QtCore.Qt.WA_TranslucentBackground) #opacity doesn't work self.label.setStyleSheet("QLabel {font-size: 100px; opacity:0.5}") 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 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())]) self.label = QtGui.QLabel('Some text\n and more',self) self.label.move(100,100) self.label.setGeometry(200,200,900,300) #This doesn't work self.label.setAttribute(QtCore.Qt.WA_TranslucentBackground) #opacity doesn't work self.label.setStyleSheet("QLabel {font-size: 100px; opacity:0.5}") 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 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())]) self.label = QtGui.QLabel('Some text\n and more',self) self.label.move(100,100) self.label.setGeometry(200,200,900,300) #This doesn't work self.label.setAttribute(QtCore.Qt.WA_TranslucentBackground) #opacity doesn't work self.label.setStyleSheet("QLabel {font-size: 100px; opacity:0.5}") 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 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())]) self.label = QtGui.QLabel('Some text\n and more',self) self.label.move(100,100) self.label.setGeometry(200,200,900,300) #This doesn't work self.label.setAttribute(QtCore.Qt.WA_TranslucentBackground) #opacity doesn't work self.label.setStyleSheet("QLabel {font-size: 100px; opacity:0.5}") 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_()) 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) #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())]) self.label = QtGui.QLabel('Some text\n and more',self) self.label.move(100,100) self.label.setGeometry(200,200,900,300) #This doesn't work self.label.setAttribute(QtCore.Qt.WA_TranslucentBackground) #opacity doesn't work self.label.setStyleSheet("QLabel {font-size: 100px; opacity:0.5}") 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; 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) #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())]) self.label = QtGui.QLabel('Some text\n and more',self) self.label.move(100,100) self.label.setGeometry(200,200,900,300) #This doesn't work self.label.setAttribute(QtCore.Qt.WA_TranslucentBackground) #opacity doesn't work self.label.setStyleSheet("QLabel {font-size: 100px; opacity:0.5}") 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_()) 

Here's a screenshot of what it looks like my non-business approach:

non working 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):

gimp fake

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_()) 
+4
source share
1 answer

Check out this example of the overlay widget that you can adapt to your needs:

 #!/usr/bin/env python #-*- coding:utf-8 -*- from PyQt4.QtCore import * from PyQt4.QtGui import * class overlay(QWidget): def __init__(self, parent=None): super(overlay, self).__init__(parent) palette = QPalette(self.palette()) palette.setColor(palette.Background, Qt.transparent) self.setPalette(palette) def paintEvent(self, event): painter = QPainter() painter.begin(self) painter.setRenderHint(QPainter.Antialiasing) painter.fillRect(event.rect(), QBrush(QColor(255, 255, 255, 127))) 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(QPen(Qt.NoPen)) class windowOverlay(QWidget): def __init__(self, parent=None): super(windowOverlay, self).__init__(parent) self.editor = QTextEdit() self.editor.setPlainText("OVERLAY"*100) self.button = QPushButton("Toggle Overlay") self.verticalLayout = QVBoxLayout(self) self.verticalLayout.addWidget(self.editor) self.verticalLayout.addWidget(self.button) self.overlay = overlay(self.editor) self.overlay.hide() self.button.clicked.connect(lambda: self.overlay.setVisible(False) if self.overlay.isVisible() else self.overlay.setVisible(True)) def resizeEvent(self, event): self.overlay.resize(event.size()) event.accept() if __name__ == "__main__": import sys app = QApplication(sys.argv) main = windowOverlay() main.show() sys.exit(app.exec_()) __ (parent) #!/usr/bin/env python #-*- coding:utf-8 -*- from PyQt4.QtCore import * from PyQt4.QtGui import * class overlay(QWidget): def __init__(self, parent=None): super(overlay, self).__init__(parent) palette = QPalette(self.palette()) palette.setColor(palette.Background, Qt.transparent) self.setPalette(palette) def paintEvent(self, event): painter = QPainter() painter.begin(self) painter.setRenderHint(QPainter.Antialiasing) painter.fillRect(event.rect(), QBrush(QColor(255, 255, 255, 127))) 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(QPen(Qt.NoPen)) class windowOverlay(QWidget): def __init__(self, parent=None): super(windowOverlay, self).__init__(parent) self.editor = QTextEdit() self.editor.setPlainText("OVERLAY"*100) self.button = QPushButton("Toggle Overlay") self.verticalLayout = QVBoxLayout(self) self.verticalLayout.addWidget(self.editor) self.verticalLayout.addWidget(self.button) self.overlay = overlay(self.editor) self.overlay.hide() self.button.clicked.connect(lambda: self.overlay.setVisible(False) if self.overlay.isVisible() else self.overlay.setVisible(True)) def resizeEvent(self, event): self.overlay.resize(event.size()) event.accept() if __name__ == "__main__": import sys app = QApplication(sys.argv) main = windowOverlay() main.show() sys.exit(app.exec_()) QColor ( #!/usr/bin/env python #-*- coding:utf-8 -*- from PyQt4.QtCore import * from PyQt4.QtGui import * class overlay(QWidget): def __init__(self, parent=None): super(overlay, self).__init__(parent) palette = QPalette(self.palette()) palette.setColor(palette.Background, Qt.transparent) self.setPalette(palette) def paintEvent(self, event): painter = QPainter() painter.begin(self) painter.setRenderHint(QPainter.Antialiasing) painter.fillRect(event.rect(), QBrush(QColor(255, 255, 255, 127))) 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(QPen(Qt.NoPen)) class windowOverlay(QWidget): def __init__(self, parent=None): super(windowOverlay, self).__init__(parent) self.editor = QTextEdit() self.editor.setPlainText("OVERLAY"*100) self.button = QPushButton("Toggle Overlay") self.verticalLayout = QVBoxLayout(self) self.verticalLayout.addWidget(self.editor) self.verticalLayout.addWidget(self.button) self.overlay = overlay(self.editor) self.overlay.hide() self.button.clicked.connect(lambda: self.overlay.setVisible(False) if self.overlay.isVisible() else self.overlay.setVisible(True)) def resizeEvent(self, event): self.overlay.resize(event.size()) event.accept() if __name__ == "__main__": import sys app = QApplication(sys.argv) main = windowOverlay() main.show() sys.exit(app.exec_()) __ (parent) #!/usr/bin/env python #-*- coding:utf-8 -*- from PyQt4.QtCore import * from PyQt4.QtGui import * class overlay(QWidget): def __init__(self, parent=None): super(overlay, self).__init__(parent) palette = QPalette(self.palette()) palette.setColor(palette.Background, Qt.transparent) self.setPalette(palette) def paintEvent(self, event): painter = QPainter() painter.begin(self) painter.setRenderHint(QPainter.Antialiasing) painter.fillRect(event.rect(), QBrush(QColor(255, 255, 255, 127))) 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(QPen(Qt.NoPen)) class windowOverlay(QWidget): def __init__(self, parent=None): super(windowOverlay, self).__init__(parent) self.editor = QTextEdit() self.editor.setPlainText("OVERLAY"*100) self.button = QPushButton("Toggle Overlay") self.verticalLayout = QVBoxLayout(self) self.verticalLayout.addWidget(self.editor) self.verticalLayout.addWidget(self.button) self.overlay = overlay(self.editor) self.overlay.hide() self.button.clicked.connect(lambda: self.overlay.setVisible(False) if self.overlay.isVisible() else self.overlay.setVisible(True)) def resizeEvent(self, event): self.overlay.resize(event.size()) event.accept() if __name__ == "__main__": import sys app = QApplication(sys.argv) main = windowOverlay() main.show() sys.exit(app.exec_()) ) #!/usr/bin/env python #-*- coding:utf-8 -*- from PyQt4.QtCore import * from PyQt4.QtGui import * class overlay(QWidget): def __init__(self, parent=None): super(overlay, self).__init__(parent) palette = QPalette(self.palette()) palette.setColor(palette.Background, Qt.transparent) self.setPalette(palette) def paintEvent(self, event): painter = QPainter() painter.begin(self) painter.setRenderHint(QPainter.Antialiasing) painter.fillRect(event.rect(), QBrush(QColor(255, 255, 255, 127))) 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(QPen(Qt.NoPen)) class windowOverlay(QWidget): def __init__(self, parent=None): super(windowOverlay, self).__init__(parent) self.editor = QTextEdit() self.editor.setPlainText("OVERLAY"*100) self.button = QPushButton("Toggle Overlay") self.verticalLayout = QVBoxLayout(self) self.verticalLayout.addWidget(self.editor) self.verticalLayout.addWidget(self.button) self.overlay = overlay(self.editor) self.overlay.hide() self.button.clicked.connect(lambda: self.overlay.setVisible(False) if self.overlay.isVisible() else self.overlay.setVisible(True)) def resizeEvent(self, event): self.overlay.resize(event.size()) event.accept() if __name__ == "__main__": import sys app = QApplication(sys.argv) main = windowOverlay() main.show() sys.exit(app.exec_()) if self.overlay.isVisible () else self.overlay.setVisible (True)) #!/usr/bin/env python #-*- coding:utf-8 -*- from PyQt4.QtCore import * from PyQt4.QtGui import * class overlay(QWidget): def __init__(self, parent=None): super(overlay, self).__init__(parent) palette = QPalette(self.palette()) palette.setColor(palette.Background, Qt.transparent) self.setPalette(palette) def paintEvent(self, event): painter = QPainter() painter.begin(self) painter.setRenderHint(QPainter.Antialiasing) painter.fillRect(event.rect(), QBrush(QColor(255, 255, 255, 127))) 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(QPen(Qt.NoPen)) class windowOverlay(QWidget): def __init__(self, parent=None): super(windowOverlay, self).__init__(parent) self.editor = QTextEdit() self.editor.setPlainText("OVERLAY"*100) self.button = QPushButton("Toggle Overlay") self.verticalLayout = QVBoxLayout(self) self.verticalLayout.addWidget(self.editor) self.verticalLayout.addWidget(self.button) self.overlay = overlay(self.editor) self.overlay.hide() self.button.clicked.connect(lambda: self.overlay.setVisible(False) if self.overlay.isVisible() else self.overlay.setVisible(True)) def resizeEvent(self, event): self.overlay.resize(event.size()) event.accept() if __name__ == "__main__": import sys app = QApplication(sys.argv) main = windowOverlay() main.show() sys.exit(app.exec_()) 

To overlay text, use something like this:

 class overlayLabel(QLabel): def __init__(self, parent=None): super(overlayLabel, self).__init__(parent) self.setAlignment(Qt.AlignHCenter|Qt.AlignVCenter) self.setText("OVERLAY TEXT") __ (parent) class overlayLabel(QLabel): def __init__(self, parent=None): super(overlayLabel, self).__init__(parent) self.setAlignment(Qt.AlignHCenter|Qt.AlignVCenter) self.setText("OVERLAY TEXT") 
+3
source

All Articles