pyside2 widget界面去除边框后 添加放大 缩小 关闭按钮,标题标签居中,设置标题大小,标题背景图片,并可以鼠标拖动界面移动 鼠标控制界面上行左右伸缩的代码实现
时间: 2024-04-02 07:31:20 浏览: 136
好的,我会尽力回答您的问题。
首先,要去除窗口边框并添加放大、缩小和关闭按钮,可以使用以下代码:
```python
from PySide2.QtCore import Qt
from PySide2.QtGui import QCloseEvent
from PySide2.QtWidgets import QMainWindow, QSizePolicy, QWidget, QHBoxLayout, QLabel, QPushButton
class CustomTitleBar(QWidget):
def __init__(self, parent=None):
super().__init__(parent)
self.titleLabel = QLabel(self)
self.titleLabel.setAlignment(Qt.AlignCenter)
self.titleLabel.setStyleSheet("font-size: 16px;")
self.titleLabel.setFixedHeight(40)
closeButton = QPushButton("×")
closeButton.setFixedSize(20, 20)
closeButton.clicked.connect(self.parent().close)
minimizeButton = QPushButton("-")
minimizeButton.setFixedSize(20, 20)
minimizeButton.clicked.connect(self.parent().showMinimized)
maximizeButton = QPushButton("□")
maximizeButton.setFixedSize(20, 20)
maximizeButton.clicked.connect(self.toggleMaximized)
layout = QHBoxLayout(self)
layout.setContentsMargins(0, 0, 0, 0)
layout.addWidget(self.titleLabel)
layout.addWidget(minimizeButton)
layout.addWidget(maximizeButton)
layout.addWidget(closeButton)
def toggleMaximized(self):
if self.parent().isMaximized():
self.parent().showNormal()
else:
self.parent().showMaximized()
class CustomWindow(QMainWindow):
def __init__(self, parent=None):
super().__init__(parent)
self.setWindowFlags(Qt.FramelessWindowHint)
self.setAttribute(Qt.WA_TranslucentBackground)
self.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding)
self.titleBar = CustomTitleBar(self)
self.setCentralWidget(QWidget(self))
layout = QHBoxLayout(self.centralWidget())
layout.setContentsMargins(0, 0, 0, 0)
layout.addWidget(self.titleBar)
def setTitle(self, title):
self.titleBar.titleLabel.setText(title)
def setBackgroundImage(self, image):
self.setStyleSheet(f"background-image: url('{image}');")
def mousePressEvent(self, event):
self.mousePressPos = event.pos()
self.mouseIsPressed = True
def mouseReleaseEvent(self, event):
self.mouseIsPressed = False
def mouseMoveEvent(self, event):
if self.mouseIsPressed:
delta = event.pos() - self.mousePressPos
self.move(self.pos() + delta)
def resizeEvent(self, event):
super().resizeEvent(event)
self.titleBar.setFixedWidth(self.width())
def eventFilter(self, obj, event):
if event.type() == Qt.Wheel and event.modifiers() & Qt.ControlModifier:
self.zoom(event.angleDelta().y() / 120)
return True
return super().eventFilter(obj, event)
def zoom(self, delta):
pass
def keyPressEvent(self, event):
if event.key() == Qt.Key_Escape:
self.close()
else:
super().keyPressEvent(event)
def closeEvent(self, event: QCloseEvent):
pass
```
这段代码实现了一个自定义的窗口,其中:
- CustomWindow 类继承自 QMainWindow,实现了无边框窗口的基本功能;
- CustomTitleBar 类继承自 QWidget,实现了标题栏的布局和按钮的功能;
- setTitle() 方法用于设置标题;
- setBackgroundImage() 方法用于设置窗口的背景图片;
- mousePressEvent()、mouseReleaseEvent() 和 mouseMoveEvent() 方法实现了鼠标拖动窗口的功能;
- eventFilter() 方法实现了鼠标控制界面上下左右伸缩的功能。
在使用这段代码之前,您需要将以下代码添加到您的应用程序中,以启用事件过滤器:
```python
app = QApplication(sys.argv)
app.installEventFilter(window)
```
然后,您可以使用以下代码创建一个窗口:
```python
import sys
from PySide2.QtWidgets import QApplication
from customwindow import CustomWindow
if __name__ == "__main__":
app = QApplication(sys.argv)
window = CustomWindow()
window.setTitle("My Custom Window")
window.show()
sys.exit(app.exec_())
```
这段代码创建了一个标题为 "My Custom Window" 的自定义窗口,并将其显示出来。
最后,要添加鼠标控制界面上下左右伸缩的功能,可以在 CustomWindow 类中实现 zoom() 方法,例如:
```python
def zoom(self, delta):
width = self.width() + delta * 10
height = self.height() + delta * 10
if width > 0 and height > 0:
self.setFixedSize(width, height)
```
这个方法会根据鼠标滚轮的滚动方向来改变窗口的大小。您可以将此方法添加到 CustomWindow 类中,并根据需要进行修改。
希望这些代码能够帮助您实现您的需求。如果您有任何问题,请随时问我。
阅读全文