MCPcopy
hub / github.com/PyQt5/PyQt / FramelessWindow

Class FramelessWindow

Demo/NewFramelessWindow.py:135–184  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

133
134
135class FramelessWindow(QWidget, Ui_FormFrameless):
136
137 def __init__(self, *args, **kwargs):
138 super(FramelessWindow, self).__init__(*args, **kwargs)
139 self.setupUi(self)
140 # 无边框
141 self.setWindowFlags(self.windowFlags() | Qt.FramelessWindowHint)
142 self.setAttribute(Qt.WA_TranslucentBackground, True)
143 self.setMouseTracking(True)
144 # 隐藏还原按钮
145 self.buttonNormal.setVisible(False)
146 # 标题栏按钮信号
147 self.buttonMinimum.clicked.connect(self.showMinimized)
148 self.buttonMaximum.clicked.connect(self.showMaximized)
149 self.buttonNormal.clicked.connect(self.showNormal)
150 self.buttonClose.clicked.connect(self.close)
151 self.setStyleSheet('#widgetTitleBar{background: rgb(232, 232, 232);}')
152
153 def showMinimized(self):
154 flags = self.windowFlags()
155 if sys.platform == 'darwin':
156 # fix mac 最小化失效问题
157 self.setWindowFlags((self.windowFlags() | Qt.CustomizeWindowHint) &
158 (~Qt.WindowTitleHint))
159 super(FramelessWindow, self).showMinimized()
160 if sys.platform == 'darwin':
161 # fix mac 最小化失效问题
162 self.setWindowFlags(flags)
163 self.show()
164
165 def changeEvent(self, event):
166 """窗口状态改变
167 :param event:
168 """
169 super(FramelessWindow, self).changeEvent(event)
170 # 窗口状态改变时修改标题栏控制按钮
171 visible = self.isMaximized()
172 self.buttonMaximum.setVisible(not visible)
173 self.buttonNormal.setVisible(visible)
174 if visible:
175 self.layout().setContentsMargins(0, 0, 0, 0)
176 else:
177 # TODO 与UI文件中的布局边距一致
178 m = FramelessObject.Margins
179 self.layout().setContentsMargins(m, m, m, m)
180
181 def paintEvent(self, event):
182 # 透明背景但是需要留下一个透明度用于鼠标捕获
183 painter = QPainter(self)
184 painter.fillRect(self.rect(), QColor(255, 255, 255, 1))
185
186
187if __name__ == '__main__':

Callers 2

FramelessWindow.pyFile · 0.90

Calls

no outgoing calls

Tested by

no test coverage detected