Белая полоска вверху приложения появляется при создании пользовательской строки заголовка в PyQt5 - PullRequest
0 голосов
/ 23 апреля 2020

Я работаю над созданием настраиваемой настраиваемой строки заголовка для своего приложения, чтобы я мог создавать собственные действия / цвета в строке заголовка. Перемещение окна с помощью строки заголовка прекрасно работает. Конечно, тогда мне нужно было реализовать возможность изменения размера окна. Я заметил, что мог бы выполнить это sh, установив флаг окна

self.setWindowFlags(QtCore.Qt.CustomizeWindowHint)

Однако, когда я добавляю в эту строку кода, белая полоса / рамка появляется в верхней части приложения. Когда я удаляю эту строку, белая полоска исчезает, и, хотя я не могу изменить размер своего окна, строка заголовка работает очень хорошо (с точки зрения перемещения и функциональности).

Кто-нибудь знает, почему это происходит из-за этой строки? Есть ли способ избавиться от этого слипа или хотя бы изменить его цвет, чтобы он соответствовал моему заголовку? Урезанная версия строки заголовка находится ниже.

import sys

from PyQt5 import QtWidgets
from PyQt5 import QtCore

class MainWindow(QtWidgets.QWidget):

    def __init__(self):
        super(MainWindow, self).__init__()
        self.layout = QtWidgets.QVBoxLayout()
        self.layout.addWidget(MyBar(self))
        self.setLayout(self.layout)
        self.layout.setContentsMargins(0, 0, 0, 0)
        self.layout.addStretch(-1)
        self.setMinimumSize(800, 400)
        self.setWindowFlags(QtCore.Qt.FramelessWindowHint)
        self.pressing = False
        self.setStyleSheet("""
            background-color: gray;
            color: white;
        """)

        self.setWindowFlags(QtCore.Qt.CustomizeWindowHint)


class MyBar(QtWidgets.QWidget):

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

        btn_size = 35

        self.btn_close = QtWidgets.QPushButton("x")
        self.btn_close.clicked.connect(self.btn_close_clicked)
        self.btn_close.setFixedSize(btn_size,btn_size)
        self.btn_close.setStyleSheet("background-color: red;")

        self.btn_min = QtWidgets.QPushButton("-")
        self.btn_min.clicked.connect(self.btn_min_clicked)
        self.btn_min.setFixedSize(btn_size, btn_size)
        self.btn_min.setStyleSheet("background-color: gray;")

        self.btn_max = QtWidgets.QPushButton("+")
        self.btn_max.clicked.connect(self.btn_max_clicked)
        self.btn_max.setFixedSize(btn_size, btn_size)
        self.btn_max.setStyleSheet("background-color: gray;")

        self.title.setFixedHeight(35)
        self.title.setAlignment(QtCore.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: black;
            color: white;
        """)
        self.setLayout(self.layout)

        self.start = QtCore.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()


if __name__ == "__main__":
    app = QtWidgets.QApplication(sys.argv)
    mw = MainWindow()
    mw.show()
    sys.exit(app.exec_())

Белая полоска видна ниже

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...