如何控制QSplitter内部的间距
How to control spacing inside of QSplitter
下面的代码创建了一个带有 QSplitter
的对话框 window。
分离器的左右两侧分配了深色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_())
您必须将布局边距设置为 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()
在这种情况下是不必要的,因为这表示布局内的小部件之间的 space,但在这种情况下只有 QLabel
仅在布局中。
您还可以使用:
splitter->setHandleWidth(1);
下面的代码创建了一个带有 QSplitter
的对话框 window。
分离器的左右两侧分配了深色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_())
您必须将布局边距设置为 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()
在这种情况下是不必要的,因为这表示布局内的小部件之间的 space,但在这种情况下只有 QLabel
仅在布局中。
您还可以使用:
splitter->setHandleWidth(1);