TransWikia.com

Как задать конкретное расстояние между двумя виджетами в QHBoxLayout?

Stack Overflow на русском Asked by MAXIM045 on December 4, 2020

Мой код создает вертикальный контейнер v_box, он является главным контейнером окна и содержит в себе горизонтальный контейнер h_box, который я покрасил в желтый цвет.

Контейнер h_box содержит три виджета:

  • Надпись label_1,
  • Кнопка btn,
  • Надпись label_2.

Надпись label_1 прижата к левому краю h_box и должна оставаться там всегда.

Надпись label_2 прижата к правому краю h_box и должна оставаться там всегда.

Кнопка btn сейчас не имеет конкретного местоположения и я хочу это исправить. На картинке ниже показал расстояние между label_1 и btnd.

Мне нужно задать конкретную и постоянную величину этого расстояния в пикселях. Пожалуйста, подскажите как мне это сделать?

введите сюда описание изображения

from PyQt5 import QtCore, QtWidgets

class MyWindow(QtWidgets.QWidget):
    def __init__(self, parent = None):
        super().__init__(parent)

        v_box = QtWidgets.QVBoxLayout(self)

        box = QtWidgets.QWidget()
        box.setStyleSheet(box_qss)
        box.setFixedHeight(50)
        h_box = QtWidgets.QHBoxLayout(box)
        v_box.addWidget(box)

        label_1 = QtWidgets.QLabel('label_1')
        h_box.addWidget(label_1)

        btn = QtWidgets.QPushButton('btn')
        btn.setStyleSheet(btn_qss)
        btn.setFixedSize(40, 30)
        h_box.addWidget(btn, alignment = QtCore.Qt.AlignLeft)
        
        label_2 = QtWidgets.QLabel('label_2')
        h_box.addWidget(label_2, alignment = QtCore.Qt.AlignRight)

box_qss = '''QWidget {
                      background-color: yellow;
                      border-radius: 5px;
                  }'''

btn_qss = '''QWidget {
                      background-color: white;
                      border-radius: 5px;
                  }'''

if __name__ == '__main__':
    import sys
    app = QtWidgets.QApplication(sys.argv)
    window = MyWindow()
    window.setWindowTitle(' ')
    window.show()
    sys.exit(app.exec_())

One Answer

void QBoxLayout::addSpacing(int size)

Добавляет нерастяжимое пространство (QSpacerItem) с размером size в конец этого макета блока. QBoxLayout предоставляет поля и интервалы по умолчанию. Эта функция добавляет дополнительное пространство.

void QBoxLayout::addStretch(int stretch = 0)

Добавляет растягиваемое пространство (QSpacerItem) с нулевым минимальным размером и коэффициентом растяжения до конца этого макета блока.

from PyQt5 import QtCore, QtWidgets

class MyWindow(QtWidgets.QWidget):
    def __init__(self, parent = None):
        super().__init__(parent)

        v_box = QtWidgets.QVBoxLayout(self)

        box = QtWidgets.QWidget()
        box.setStyleSheet(box_qss)
        box.setFixedHeight(50)
        h_box = QtWidgets.QHBoxLayout(box)
        v_box.addWidget(box)

        label_1 = QtWidgets.QLabel('label_1')
        h_box.addWidget(label_1) 
        
        h_box.addSpacing(30)                                       # +++

        btn = QtWidgets.QPushButton('btn')
        btn.setStyleSheet(btn_qss)
        btn.setFixedSize(40, 30)
        h_box.addWidget(btn)                                       #, alignment = QtCore.Qt.AlignLeft)
        
        h_box.addStretch(1)                                        # +++
        
        label_2 = QtWidgets.QLabel('label_2')
        h_box.addWidget(label_2, alignment = QtCore.Qt.AlignRight)

box_qss = '''QWidget {
                      background-color: yellow;
                      border-radius: 5px;
                  }'''

btn_qss = '''QWidget {
                      background-color: white;
                      border-radius: 5px;
                  }'''

if __name__ == '__main__':
    import sys
    app = QtWidgets.QApplication(sys.argv)
    window = MyWindow()
    window.setWindowTitle(' ')
    window.show()
    sys.exit(app.exec_())

введите сюда описание изображения

Correct answer by S. Nick on December 4, 2020

Add your own answers!

Ask a Question

Get help from others!

© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP