<Pyqt5> PyQt5自定义标题栏

class MyBar(QWidget):

    def get_button(self, icon, onClick):
        btn_size = 35
        btn = borderless_tool_button(QIcon(icon), size=ThpQSize(16, 16))
        btn.clicked.connect(onClick)
        btn.setFixedSize(btn_size, btn_size)
        btn.setStyleSheet("QToolButton { border:None; background:transparent; } ")
        return btn

    def __init__(self, parent):
        super(MyBar, self).__init__()
        self.parent = parent
        print(self.parent.width())
        self.layout = QHBoxLayout()
        self.layout.setContentsMargins(0,0,0,0)
        self.title = QLabel("My Own Bar")

        self.btn_close = self.get_button(":/res/close.png", self.btn_close_clicked)
        self.btn_min = self.get_button(":/res/minimize.png", self.btn_min_clicked)
        self.btn_max = self.get_button(":/res/maximize.png", self.btn_max_clicked)

        self.title.setFixedHeight(35)
        self.title.setAlignment(Qt.AlignCenter)
        self.layout.addWidget(self.title)
        self.layout.addWidget(self.btn_min)
        self.layout.addWidget(self.btn_max)
        self.layout.addWidget(self.btn_close)

        self.title.setStyleSheet("""
            background-color: #171745;
            color: white;
        """)
        self.setLayout(self.layout)
        self.title.setFont(yh_font(11))

        self.start = QPoint(0, 0)
        self.pressing = False

    def resizeEvent(self, QResizeEvent):
        super(MyBar, self).resizeEvent(QResizeEvent)
        self.title.setFixedWidth(self.parent.width())

    def mousePressEvent(self, event):
        self.start = self.mapToGlobal(event.pos())
        self.pressing = True

    def mouseMoveEvent(self, event):
        if self.pressing:
            self.end = self.mapToGlobal(event.pos())
            self.movement = self.end-self.start
            self.parent.setGeometry(self.mapToGlobal(self.movement).x(),
                                self.mapToGlobal(self.movement).y(),
                                self.parent.width(),
                                self.parent.height())
            self.start = self.end

    def mouseReleaseEvent(self, QMouseEvent):
        self.pressing = False

    def btn_close_clicked(self):
        self.parent.close()

    def btn_max_clicked(self):
        self.parent.showMaximized()

    def btn_min_clicked(self):
        self.parent.showMinimized()

class DemoWidget(QWidget):
    def __init__(self):
        super().__init__()
        self.setWindowFlags(Qt.FramelessWindowHint)
        self.setMinimumSize(1160, 800)
        self.setStyleSheet("background-color: #205E86")
        self.titleBar = MyBar(self)
        layout = QtWidgets.QVBoxLayout()
        layout.setContentsMargins(0, 0, 0, 10)
        layout.setSpacing(0)
        layout.addWidget(self.titleBar)
        layout.addStretch()
        self.setLayout(layout)
def set_dark_theme(app: QApplication):
    palette = QPalette()
    palette.setColor(QPalette.Window, QColor(53, 53, 53))
    palette.setColor(QPalette.WindowText, Qt.white)
    palette.setColor(QPalette.Base, QColor(25, 25, 25))
    palette.setColor(QPalette.AlternateBase, QColor(53, 53, 53))
    palette.setColor(QPalette.ToolTipBase, Qt.black)
    palette.setColor(QPalette.ToolTipText, Qt.white)
    palette.setColor(QPalette.Text, Qt.white)
    palette.setColor(QPalette.Button, QColor(53, 53, 53))
    palette.setColor(QPalette.ButtonText, Qt.white)
    palette.setColor(QPalette.BrightText, Qt.red)
    palette.setColor(QPalette.Link, QColor(42, 130, 218))
    palette.setColor(QPalette.Highlight, QColor(42, 130, 218))
    palette.setColor(QPalette.HighlightedText, Qt.black)
    app.setPalette(palette)

if __name__ == "__main__":
    app = QApplication(sys.argv)
    set_dark_theme(app)
    window = DemoWidget()
    window.show()
    sys.exit(app.exec_())


在这里插入图片描述

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 在 PyQt5 中,可以使用QWidget类创建窗口,并设置其大小、标题等属性。下面是一个简单的示例代码: ```python import sys from PyQt5.QtWidgets import QApplication, QWidget app = QApplication(sys.argv) # 创建窗口 window = QWidget() window.setGeometry(100, 100, 300, 200) # 设置窗口位置和大小 window.setWindowTitle('My Window') # 设置窗口标题 window.show() # 显示窗口 sys.exit(app.exec_()) ``` 在上面的代码中,使用 `QApplication` 类创建了一个应用程序对象,然后使用 `QWidget` 类创建了一个窗口。通过调用 `setGeometry` 方法设置窗口的位置和大小,调用 `setWindowTitle` 方法设置窗口标题。最后调用 `show` 方法显示窗口,并使用 `sys.exit` 方法确保应用程序在关闭窗口后能够正常退出。 除了上述方法,还可以使用 `setFixedSize` 方法设置窗口的固定大小,或者使用 `setWindowFlags` 方法设置窗口的样式和特性。具体方法请参考 PyQt5 的文档。 ### 回答2: PyQt5 是基于 Python 的 GUI 开发框架,通常用于创建窗口应用程序。对于窗口的设置,主要包括以下几个步骤: 1. 创建窗口对象:通过使用 QtWidgets 模块中的 QApplication 和 QMainWindow 类来创建一个窗口对象。 2. 设置窗口的基本属性:可以使用 QMainWindow 类提供的方法来设置窗口的标题、大小和位置等基本属性。 3. 设置窗口的样式:可以通过设置窗口对象的样式表来自定义窗口的外观。使用样式表,可以修改窗口的背景、字体、颜色等属性。 4. 添加组件和布局:可以在窗口对象中添加各种组件,如按钮、标签和文本框等。QtWidgets 模块中的各种组件类可用于创建和设置这些组件。 5. 设置窗口事件:可以为窗口对象添加各种事件,如鼠标点击事件和键盘事件等。通过重新定义这些事件的处理函数,可以实现特定的操作。 6. 显示窗口:最后,使用窗口对象的 show() 方法将窗口显示出来。 例如,以下是一个简单的使用 PyQt5 创建窗口的示例: import sys from PyQt5.QtWidgets import QApplication, QMainWindow # 创建窗口对象 app = QApplication(sys.argv) window = QMainWindow() # 设置窗口的标题、大小和位置 window.setWindowTitle("My Window") window.setGeometry(100, 100, 500, 400) # 设置窗口的样式 window.setStyleSheet("background-color: yellow;") # 添加组件和布局 # 设置窗口事件 # 显示窗口 window.show() # 运行应用程序 sys.exit(app.exec_()) 通过上述步骤,就可以使用 PyQt5 来创建一个基本的窗口,并对其进行设置和自定义。 ### 回答3: PyQt5是一个用于创建桌面应用程序的Python库,可以在其中设置窗口的各种属性和功能。以下是关于PyQt5窗口设置的一些重要信息: 1. 创建窗口:使用`QMainWindow`或`QDialog`类可以创建一个窗口对象。可以使用构造函数传递窗口标题、大小和位置等参数。 2. 设置窗口标题:通过`setWindowTitle()`方法可以设置窗口的标题。 3. 设置窗口大小:使用`setFixedSize()`方法可以设置窗口的固定大小。也可以使用`resize()`方法设置窗口的初始大小。 4. 设置窗口图标:可以使用`setWindowIcon()`方法设置窗口的图标。需要传递一个`QIcon`对象作为参数。 5. 窗口位置:可以使用`move()`方法设置窗口的初始位置。可以传递具体的坐标值或使用屏幕中心的偏移量。 6. 窗口样式:可以使用`setStyleSheet()`方法设置窗口的样式表,以改变其外观和样式。 7. 居中显示窗口:使用`QDesktopWidget`类可以获取屏幕的大小和工作区大小,从而将窗口居中显示。 8. 窗口关闭事件:使用`closeEvent()`方法可以在窗口关闭前执行一些操作,例如询问用户是否确认关闭。 9. 窗口透明度:可以使用`setWindowOpacity()`方法设置窗口的透明度,值为0到1之间的浮点数。 10. 设置窗口背景:可以使用`setStyleSheet()`方法设置窗口的背景样式,也可以使用`setBackgroundRole()`方法设置背景角色。 总之,PyQt5提供了丰富的方法和功能来设置和自定义窗口。通过设置窗口的标题、大小、位置、图标、样式等,我们可以创建出漂亮且功能丰富的用户界面。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值