2017-10-26 11 views
0

以下のコードは、QSplitterのダイアログウィンドウを作成します。 スプリッタの左側と右側には、暗い色のQWidgetが割り当てられています。 それぞれのQWidgetレイアウトの間隔は0(ゼロ)に設定されています(余白がないはずです)。 これらの0間隔レイアウトには、明るい色のQLabelが追加されました。QSplitterの間隔を制御する方法

QWidgetの全体をQLabelに入力して、スペースや余白を入れないようにします。したがって、QLabelはエキスパンドしてエッジからエッジまで拡張します。理想的には、QWidgetの暗い色は見えません。 QLabelがQWidgetの内側から外側に広がるように、コードをどのように変更できますか?

enter image description here

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

答えて

2

あなたは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_()) 

スクリーンショット:

enter image description here

注:これは、レイアウト内のウィジェットの間の空間を示しているのでsetSpacing()は、この場合には不要であるが、この場合にのみQLabelのみレイアウトです。

関連する問題