【问题标题】:How to control spacing inside of QSplitter如何控制 QSplitter 内部的间距
【发布时间】:2017-10-26 03:32:18
【问题描述】:

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

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

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_())

【问题讨论】:

    标签: python pyqt pyqt5 qsplitter


    【解决方案1】:

    您必须将布局边距设置为 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 仅在布局中。

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 2015-03-27
        • 2011-10-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-06-07
        • 2021-01-01
        相关资源
        最近更新 更多