如何控制QSplitter内部的间距

时间:2017-10-26 03:32:19

标签: python pyqt pyqt5 qsplitter

下面的代码会创建一个带有QSplitter的对话框窗口。 分离器的左侧和右侧分配有深色QWidget。 每个QWidget布局的间距都设置为0(零)(因此不应有边距)。 对于这些0间距布局中的每一个,都添加了浅色QLabel。

我希望QLabel填充整个QWidget,没有间距或边距。因此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 :(得分:2)

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

private void registerNotifications() {
    System.out.print("Registering notifications...");
    try {
        bt.subscribe(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent evt) {
                JSONObject dataIncoming = (JSONObject) evt.getSource();
                String base64Value = "";
                try {
                    if (dataIncoming.getString("status").equals("subscribedResult")) {
                        base64Value = dataIncoming.getString("value");
                    }
                } catch (JSONException e) {
                    e.printStackTrace();
                }
                String message = new String(Base64.decode(base64Value.getBytes()));
                Display.getInstance().callSerially(new Runnable() {

                    @Override
                    public void run() {
                        messageReceived.set(message);
                    }
                });
            }
        }, deviceAddress, services.get(0), receiveDataCharacteristic);
        System.out.println("Registered");
        System.out.println("Starting communication");
    } catch (IOException e) {
        System.err.println("Unable to register notifications " + e.getMessage());
        e.printStackTrace();
    }
}

代码:

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

截图:

enter image description here

注意: 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()仅在布局中。

答案 1 :(得分:0)

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