QWidget 中的布局在添加拉伸时使背景变白
Layout in QWidget makes background white when adding a stretch
我正在使用 PyQt5 及其样式系统为我的应用程序创建外观现代的 GUI,但我似乎无法做到这一点。
所以我的服装标题栏都可以正常工作。它有3个部分;一个菜单栏、一个标签和另一个用作标题栏按钮的菜单栏,用于关闭、最小化和最大化。
我需要这个标题栏是浅灰色,但正如您在下图中看到的那样,元素之间有白色 space。
现在是什么:
应该是什么:
当您运行下面的示例时,您可以看到标签之间有一些空白space。即使标签位于没有样式的框内,样式也是在小部件上设置的。
#### 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 的背景颜色设置为浅灰色并且忽略了拉伸。
有人知道解决这个问题的方法吗?
默认情况下,布局具有依赖于样式的 spacing
,因此针对您的情况的解决方案是将其设置为 0:
# ...
parentLayout = QHBoxLayout()
<b>parentLayout.setSpacing(0)</b>
# ...
我发现设置背景小部件解决了问题:
parentWidget = QWidget()
label_background = QLabel(parentWidget)
label_background.setFixedSize(1920, 1080)
我正在使用 PyQt5 及其样式系统为我的应用程序创建外观现代的 GUI,但我似乎无法做到这一点。
所以我的服装标题栏都可以正常工作。它有3个部分;一个菜单栏、一个标签和另一个用作标题栏按钮的菜单栏,用于关闭、最小化和最大化。 我需要这个标题栏是浅灰色,但正如您在下图中看到的那样,元素之间有白色 space。
现在是什么:
应该是什么:
当您运行下面的示例时,您可以看到标签之间有一些空白space。即使标签位于没有样式的框内,样式也是在小部件上设置的。
#### 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 的背景颜色设置为浅灰色并且忽略了拉伸。
有人知道解决这个问题的方法吗?
默认情况下,布局具有依赖于样式的 spacing
,因此针对您的情况的解决方案是将其设置为 0:
# ...
parentLayout = QHBoxLayout()
<b>parentLayout.setSpacing(0)</b>
# ...
我发现设置背景小部件解决了问题:
parentWidget = QWidget()
label_background = QLabel(parentWidget)
label_background.setFixedSize(1920, 1080)