2

下面的代码创建一个带有QSplitter. 拆分器的左侧和右侧分配了一个深色QWidget。每个QWidget布局的间距都设置为 0(零)(所以应该没有边距)。对于这些 0 间距布局中的每一个,都添加了一个浅色 QLabel。

我想QLabel填充一个QWidget没有间距或边距的整体。所以QLabel会扩大并从边缘延伸到边缘。理想情况下,我们不会看到 QWidget 的深色。我们如何修改代码以便在QLabelQWidget 内部从边缘延伸到边缘?

在此处输入图像描述

from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *

app = QApplication([])
window = QDialog()
window.setLayout(QVBoxLayout())
window.resize(400, 250)

splitter = QSplitter(Qt.Horizontal)
window.layout().addWidget(splitter)

for side in ['left', 'right']:
    widget = QWidget()
    widget.setStyleSheet("background-color:gray;")
    widget_layout = QVBoxLayout()
    widget_layout.setSpacing(0)
    widget.setLayout(widget_layout)
    label = QLabel('%s side QLabel' % side.capitalize())
    label.setAlignment(Qt.AlignCenter)
    label.setStyleSheet("background-color:lightgray;")
    widget.layout().addWidget(label)
    splitter.addWidget(widget)

window.show()
sys.exit(app.exec_())
4

2 回答 2

4

您必须将布局边距设置为 0:

widget_layout.setContentsMargins(0, 0, 0, 0)

代码:

app = QApplication(sys.argv)
window = QDialog()
window.setLayout(QVBoxLayout())
window.resize(400, 250)

splitter = QSplitter(Qt.Horizontal)
window.layout().addWidget(splitter)

for side in ['left', 'right']:
    widget = QWidget()
    widget.setStyleSheet("background-color:gray;")
    widget_layout = QVBoxLayout()
    widget_layout.setContentsMargins(0, 0, 0, 0) # this line
    widget_layout.setSpacing(0)
    widget.setLayout(widget_layout)
    label = QLabel('%s side QLabel' % side.capitalize())
    label.setAlignment(Qt.AlignCenter)
    label.setStyleSheet("background-color:lightgray;")
    label.setContentsMargins(0, 0, 0, 0)
    widget.layout().addWidget(label)
    splitter.addWidget(widget)

window.show()
sys.exit(app.exec_())

截屏:

在此处输入图像描述

注意: setSpacing()在这种情况下是不必要的,因为这表示布局内小部件之间的空间,但在这种情况下,只有QLabel仅在布局中。

于 2017-10-26T04:16:17.567 回答
0

您还可以使用: splitter->setHandleWidth(1);

于 2020-12-30T03:38:30.057 回答