Search code examples
pythonpyqt5widgetwindowtransparent

Reset Window Attribute to default pyqt5


I have a small issue. I can make a widget's backgroud to be transparent by using following code.

self.setwindowFlags(Qt.WA_TranslucentBackground)

after applying this, I want to revert this to initial state by any event. Help me.


Solution

  • Try it:

    import sys
    from PyQt5 import QtWidgets, QtCore
    
    
    class Widget(QtWidgets.QWidget):
        def __init__(self, parent=None):
            super(Widget, self).__init__(parent)
    
            self.setAttribute(QtCore.Qt.WA_TranslucentBackground)
            self.setWindowFlags(QtCore.Qt.FramelessWindowHint)
    
            self.widget = QtWidgets.QWidget(self)
            self.widget.setStyleSheet('.QWidget {background-color: blue;}')
            self.widget.setObjectName('widget')
            self.widget.setFixedSize(700, 500)
    
            close_button = QtWidgets.QPushButton('close window', clicked=self.close)
    
            self.change_button = QtWidgets.QPushButton('change StyleSheet')
            self.change_button.setCheckable(True)
            self.change_button.toggled.connect(self.button_state_func)   
    
            layout = QtWidgets.QGridLayout(self.widget)
            layout.addWidget(close_button)
            layout.addWidget(self.change_button)
    
        def button_state_func(self, state):
            if state:
                self.widget.setStyleSheet('QWidget#widget {background-color: transparent;}')
            else:
                self.widget.setStyleSheet('QWidget#widget {background-color: yellow;}')       
            
    
    if __name__ == '__main__':
        app = QtWidgets.QApplication(sys.argv)
        w = Widget()
        w.show()
        sys.exit(app.exec_())
    

    enter image description here