Layout в QWidget делает фон белым при добавлении растяжки - PullRequest
0 голосов
/ 04 октября 2019

Я использую PyQt5 и его систему стилей для создания современного графического интерфейса для моего приложения, и я не могу понять, что это правильно.

Итак, у меня есть рабочий костюм. Имеет 3 части;меню, ярлык и другое меню, которые служат кнопками заголовка для закрытия, мини- и максимизации. Мне нужно, чтобы этот заголовок был светло-серого цвета, но, как вы можете видеть на рисунке ниже, между элементами есть пробел.

Что это сейчас:

enter image description here

Что должно быть:

enter image description here

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

#### PyQt imports....
from PyQt5.QtCore import Qt
from PyQt5.QtWidgets import (QWidget, QHBoxLayout, QMenuBar, QApplication,
                            QLabel, QVBoxLayout)
#### Python imports....
import sys

#### Class for sampleWindow....
class sampleWindow(QWidget):
    def __init__(self):
        super().__init__()

        #### Some window settings....
        self.setWindowTitle('Sample Program')
        self.setGeometry(400, 300, 1000, 500)

        ######## THE SAME PROBLEM BUT THIS TIME NOT IN A QMENUBAR ########
        #### Creating the widget and it's layout....
        parentLayout = QHBoxLayout()
        parentWidget = QWidget()

        #### Creating the elements....
        sampleLabelLeft = QLabel('left')
        sampleLabelCenter = QLabel('center')
        sampleLabelRight = QLabel('right')

        #### Setting alignment for the elements....
        sampleLabelLeft.setAlignment(Qt.AlignLeft)
        sampleLabelCenter.setAlignment(Qt.AlignCenter)
        sampleLabelRight.setAlignment(Qt.AlignRight)

        #### Adding the elements to the parentLayout....
        parentLayout.addWidget(sampleLabelLeft)
        parentLayout.addWidget(sampleLabelCenter)
        parentLayout.addWidget(sampleLabelRight)

        #### Setting parentLayout as layout for parentWidget....
        parentWidget.setLayout(parentLayout)

        #### Set styling for elements....
        self.setStyleSheet('QWidget{background:blue;} QLabel{background:red;}')

        #### Setting some a box to put parentWidget in so it can be set as the main layout....
        mainBox = QVBoxLayout()
        mainBox.addStretch()
        mainBox.addWidget(parentWidget)
        mainBox.addStretch()
        mainBox.setContentsMargins(200,200,200,200)
        self.setLayout(mainBox)

app = QApplication(sys.argv)
sampleWindow = sampleWindow()
sampleWindow.show()
app.exec()

Итак, после этого я установил цвет фона QWidget немного светло-серым, а растяжки игнорируются.

Кто-нибудь знает обходной путь для этого?

1 Ответ

0 голосов
/ 04 октября 2019

По умолчанию макет имеет стиль-зависимый spacing, поэтому решение для вашего случая - установить его на 0:

# ...
parentLayout = QHBoxLayout()
<b>parentLayout.setSpacing(0)</b>
# ...
...