【问题标题】:Reset Window Attribute to default pyqt5将窗口属性重置为默认的pyqt5
【发布时间】:2020-07-02 20:25:41
【问题描述】:

我有一个小问题。 我可以使用以下代码使小部件的背景透明。

self.setwindowFlags(Qt.WA_TranslucentBackground)

应用此功能后,我想通过任何事件将其恢复为初始状态。 帮帮我。

【问题讨论】:

标签: python pyqt5 widget window transparent


【解决方案1】:

试试看:

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_())

【讨论】:

  • 太棒了。非常感谢。我希望保持联系没有。这是惊人的帮助。
【解决方案2】:

一个非常基本的解决方案是存储当前状态,以便您可以在最近恢复它。

请注意,如果在显示小部件之后调用setWindowFlags,您可能需要explicitly show it again:

注意:此函数在更改窗口的标志时调用 setParent(),导致窗口小部件被隐藏。您必须调用 show() 使小部件再次可见..

class SomeWidget(QtWidgets.QWidget):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)

        self.defaultWindowFlags = self.windowFlags()
        self.setwindowFlags(Qt.WA_TranslucentBackground)

        # ...
        self.restoreButton = QtWidgets.QPushButton('Restore state')
        # ...
        self.restoreButton.clicked.connect(self.restoreFlags)

    def restoreFlags(self):
        # setWindowFlags calls setParent(), so you might need to show it again if
        # it was visible before; let's store the current state
        isVisible = self.isVisible()
        self.setWindowFlags(self.defaultWindowFlags)
        if isVisible:
            self.setVisible(True)

【讨论】:

    猜你喜欢
    • 2018-04-11
    • 2012-01-03
    • 1970-01-01
    • 1970-01-01
    • 2010-10-16
    • 1970-01-01
    相关资源
    最近更新 更多