pyside2 widget界面去除边框后 添加放大 缩小 关闭按钮并可以鼠标拖动界面移动的代码实现
时间: 2023-09-04 08:12:12 浏览: 117
以下是一个可以实现你要求的 PySide2 widget 界面效果的示例代码:
```python
from PySide2.QtWidgets import *
from PySide2.QtCore import *
from PySide2.QtGui import *
class MainWindow(QWidget):
def __init__(self):
super().__init__()
# 设置窗口无边框
self.setWindowFlags(Qt.FramelessWindowHint)
# 添加放大、缩小、关闭按钮
self.btn_maximize = QPushButton('口')
self.btn_minimize = QPushButton('一')
self.btn_close = QPushButton('X')
# 设置按钮的样式及大小
self.btn_maximize.setObjectName('maximize')
self.btn_minimize.setObjectName('minimize')
self.btn_close.setObjectName('close')
self.btn_maximize.setFixedSize(20, 20)
self.btn_minimize.setFixedSize(20, 20)
self.btn_close.setFixedSize(20, 20)
# 添加按钮的响应事件
self.btn_maximize.clicked.connect(self.maximize)
self.btn_minimize.clicked.connect(self.minimize)
self.btn_close.clicked.connect(self.close)
# 创建标题栏
self.title_bar = QWidget()
self.title_bar.setObjectName('title_bar')
# 添加标题栏的布局
self.layout_title = QHBoxLayout(self.title_bar)
self.layout_title.setContentsMargins(0, 0, 0, 0)
self.layout_title.setSpacing(0)
self.layout_title.addWidget(QLabel('Title', self.title_bar))
self.layout_title.addWidget(self.btn_minimize)
self.layout_title.addWidget(self.btn_maximize)
self.layout_title.addWidget(self.btn_close)
# 添加主窗口的布局
self.layout_main = QVBoxLayout(self)
self.layout_main.setContentsMargins(0, 0, 0, 0)
self.layout_main.addWidget(self.title_bar)
# 设置窗口背景色
self.setStyleSheet('''
QWidget {
background-color: white;
}
#title_bar {
background-color: #303030;
color: white;
height: 30px;
}
QPushButton#maximize, QPushButton#minimize, QPushButton#close {
border: none;
color: white;
font-size: 16px;
}
QPushButton#maximize:hover, QPushButton#minimize:hover, QPushButton#close:hover {
background-color: #555;
}
''')
# 设置窗口大小
self.setFixedSize(600, 400)
def maximize(self):
if self.isMaximized():
self.showNormal()
else:
self.showMaximized()
def minimize(self):
self.showMinimized()
# 实现鼠标拖动窗口
def mousePressEvent(self, event):
if event.button() == Qt.LeftButton:
self.m_flag = True
self.m_Position = event.globalPos() - self.pos()
event.accept()
self.setCursor(QCursor(Qt.OpenHandCursor))
def mouseMoveEvent(self, QMouseEvent):
if Qt.LeftButton and self.m_flag:
self.move(QMouseEvent.globalPos() - self.m_Position)
QMouseEvent.accept()
def mouseReleaseEvent(self, QMouseEvent):
self.m_flag = False
self.setCursor(QCursor(Qt.ArrowCursor))
if __name__ == '__main__':
app = QApplication([])
win = MainWindow()
win.show()
app.exec_()
```
这段代码首先创建了一个 `MainWindow` 类,并在 `__init__` 方法中设置了窗口无边框,添加了最大化、最小化和关闭按钮,并设置了按钮的样式及其响应事件。在 `mousePressEvent`、`mouseMoveEvent` 和 `mouseReleaseEvent` 方法中实现了鼠标拖动窗口的功能。最后通过 `app.exec_()` 运行程序。
阅读全文