Проблемы с манипуляцией позицией с помощью QGridLayout addWidget (QWidget, x, y) - PullRequest
1 голос
/ 17 июня 2020

Это действительно простой вопрос. Я новичок в PyQt5, и я немного запутался в том, как работает QGridLayout ... аргументы x и y в addwidget (QWidget, x, y), это b1, b2 и b3 всегда остаются на одинаковом расстоянии друг от друга. Я пытаюсь понять, как управлять положением кнопок, сохраняя при этом пропорциональную настройку (избегая QPushButton.move ()), и из того, что я видел, QGridLayout - лучший способ сделать это.

1 Ответ

0 голосов
/ 17 июня 2020

Установка координат виджетов в макете сетки путем «пропуска» строк или столбцов почти бесполезна, поскольку это координаты сетки, которые только сообщают диспетчеру макета, в каких «слотах» будут находиться виджеты: поскольку в строки со 2 по 4, это пространство не будет использоваться.

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

    layout.addWidget(b1, 0, 0)
    layout.addWidget(b3, 1, 0)
    layout.addWidget(b2, 2, 0)
    layout.setRowStretch(2, 1)
    layout.setRowMinimumHeight(2, 50)

Но это может быть не то, что вам нужно, так как третья кнопка будет размещена в центре вертикальной сетки строк (оставляя пустое место внизу).

Чтобы избежать этого, два возможных решения:

  • добавить виджет, установив выравнивание по низу:

    layout.addWidget(b2, 2, 0, alignment=QtCore.Qt.AlignBottom)
    
  • добавить последний виджет в четвертая строка и задайте растяжение и минимальную высоту для третьей пустой строки.

        layout.addWidget(b2, <b>3</b>, 0)
        layout.setRowStretch(<b>2</b>, 1)
        layout.setRowMinimumHeight(<b>2</b>, 50)
...