【自定义UI框架】Pyside6自定义界面

import sys
from PySide6.QtCore import Qt, QPoint
from PySide6.QtWidgets import QApplication, QWidget, QVBoxLayout, QHBoxLayout, QLabel, QPushButton, QFrame


class CustomTitleBar(QFrame):
    def __init__(self, parent=None):
        super(CustomTitleBar, self).__init__(parent)
        self.setStyleSheet("background-color: #2d2d2d")
        self.setFixedHeight(30)
        self.parent = parent
        self.old_pos = None

        layout = QHBoxLayout()
        layout.setContentsMargins(0, 0, 0, 0)

        self.titleLabel = QLabel("Custom Title Bar")
        self.titleLabel.setStyleSheet("color: white")
        layout.addWidget(self.titleLabel, alignment=Qt.AlignLeft)

        self.minimizeButton = QPushButton("-")
        self.minimizeButton.clicked.connect(self.parent.showMinimized)
        layout.addWidget(self.minimizeButton, alignment=Qt.AlignRight)

        self.maximizeButton = QPushButton("+")
        self.maximizeButton.clicked.connect(self.toggleMaximizeRestore)
        layout.addWidget(self.maximizeButton, alignment=Qt.AlignRight)

        self.closeButton = QPushButton("x")
        self.closeButton.clicked.connect(self.parent.close)
        layout.addWidget(self.closeButton, alignment=Qt.AlignRight)

        self.setLayout(layout)

    def toggleMaximizeRestore(self):
        if self.parent.isMaximized():
            self.parent.showNormal()
        else:
            self.parent.showMaximized()

    def mousePressEvent(self, event):
        if event.button() == Qt.LeftButton:
            self.old_pos = event.globalPos()

    def mouseMoveEvent(self, event):
        if event.buttons() == Qt.LeftButton and self.old_pos is not None:
            delta = event.globalPos() - self.old_pos
            self.parent.move(self.parent.x() + delta.x(), self.parent.y() + delta.y())
            self.old_pos = event.globalPos()

    def mouseDoubleClickEvent(self, event):
        if event.button() == Qt.LeftButton:
            self.toggleMaximizeRestore()


class MainWindow(QWidget):
    def __init__(self):
        super(MainWindow, self).__init__()

        self.setWindowFlags(Qt.FramelessWindowHint)

        layout = QVBoxLayout()
        layout.setSpacing(0)
        layout.setContentsMargins(0, 0, 0, 0)

        self.title_bar = CustomTitleBar(self)
        layout.addWidget(self.title_bar)

        content = QLabel("This is a custom window with a custom title bar.")
        layout.addWidget(content)

        self.setLayout(layout)


if __name__ == '__main__':
    app = QApplication(sys.argv)
    window = MainWindow()
    window.show()
    sys.exit(app.exec())

运行效果图如下:

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
PySide6 是 Qt for Python 的官方绑定库,可以通过它来使用 Qt 框架的各种功能,包括创建 UI 界面。在 PySide6 中,UI 界面可以使用 Qt Designer 工具进行设计,生成的 UI 文件可以使用 PySide6 中的 uic 模块进行加载。以下是实现 PySide6 UI 界面的简单步骤: 1. 使用 Qt Designer 工具设计 UI 界面并保存为 .ui 文件。 2. 在 Python 代码中使用 uic 模块加载 UI 文件,将其转化为 Python 代码。 3. 在 Python 代码中创建 QWidget 类的实例,将 UI 界面作为参数传递给该实例,并显示该界面。 下面是一个简单的 PySide6 UI 界面的示例代码: ```python import sys from PySide6.QtWidgets import QApplication, QWidget from PySide6.QtUiTools import loadUi class MyWidget(QWidget): def __init__(self): super().__init__() # 加载 UI 文件并将其转化为 Python 代码 loadUi('mywidget.ui', self) # 显示 UI 界面 self.show() if __name__ == '__main__': app = QApplication(sys.argv) widget = MyWidget() sys.exit(app.exec()) ``` 在这个示例中,我们首先定义了一个名为 MyWidget 的类,该类继承自 QWidget 类。在 MyWidget 类的构造函数中,我们使用 loadUi 函数加载了名为 mywidget.uiUI 文件,并将其转化为 Python 代码,并将该实例设置为 MyWidget 类的子窗口,并显示该界面。最后,在程序入口处我们创建了 QApplication 类的实例,并将 MyWidget 类的实例作为程序的主窗口,最后启动应用程序。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值