Невозможно добавить виджеты на левую сторону - PullRequest
1 голос
/ 30 апреля 2020

У меня здесь две кнопки, и я хочу, чтобы они были добавлены в левый угол над ярлыком, который также находится слева. Но это всегда добавляет кнопки на правой стороне. Вот что я сделал:

import sys
from PySide2 import QtCore, QtGui, QtWidgets
from PySide2.QtGui import QCursor
from PySide2.QtWidgets import QFrame
from PySide2.QtCore import QRect

class MyWindow(QtWidgets.QMainWindow):
    def __init__(self):
        super(MyWindow, self).__init__()
        self.initUI()

    def initUI(self):
        self.setGeometry(250, 80, 800, 600)
        self.setWindowTitle("test app")
        self.setStyleSheet("background-color: #ffffff; border")

        label = QtWidgets.QLabel(self)
        label.setFixedWidth(240)
        label.setStyleSheet("background-color: rgba(246, 246, 246, 255);")

        profile = QtWidgets.QLabel('Scrappr.io',self)
        profile.move(10, 10)

        central_widget = QtWidgets.QWidget()
        self.setCentralWidget(central_widget)

        right_container = QtWidgets.QWidget()

# ++ vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv

        glay = QtWidgets.QGridLayout(right_container)

        glay.setColumnStretch(1, 1)                                     # setColumnStretch
        glay.setRowStretch(1, 1)                                        # setRowStretch
        glay.setRowStretch(2, 2)                                        # setRowStretch
        glay.setRowStretch(3, 1)                                        # setRowStretch

# ++ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

        b1 = QtWidgets.QPushButton("Button1")
        b2 = QtWidgets.QPushButton("Button2")

        vbox = QtWidgets.QVBoxLayout()
        vbox.addWidget(b1)
        vbox.addStretch()
        vbox.addWidget(b2)

        hlay = QtWidgets.QHBoxLayout(central_widget)
        hlay.setContentsMargins(0, 0, 0, 0)
        hlay.addWidget(label)
        hlay.addWidget(right_container)
        hlay.addLayout(vbox)


def main():
    app = QtWidgets.QApplication(sys.argv)
    win = MyWindow()
    win.show()
    sys.exit(app.exec_())


if __name__ == "__main__":
    main()  

Он выдает результат, добавляя две кнопки с правой стороны. Я знаю, это все из-за горизонтального расположения.

То, чего я хочу добиться, - это чтобы кнопки справа были слева (как я отмечал):

Gui app

Заранее спасибо ...

1 Ответ

1 голос
/ 30 апреля 2020

При добавлении элементов в QHBoxLayout это делается слева направо, поэтому «vbox» добавляется справа, а «vbox» - это обработчик положения кнопки.

Возможное решение - поместить QVBoxLayout «внутри» метки и не добавлять его в QHBoxLayout:

# ...
b1 = QtWidgets.QPushButton("Button1")
b2 = QtWidgets.QPushButton("Button2")

<b>vbox = QtWidgets.QVBoxLayout(label)</b>
vbox.addWidget(b1)
vbox.addStretch()
vbox.addWidget(b2)

hlay = QtWidgets.QHBoxLayout(central_widget)
hlay.setContentsMargins(0, 0, 0, 0)
hlay.addWidget(label)
hlay.addWidget(right_container)
<b># hlay.addLayout(vbox) # &lt--- remove this line</b>
# ...

enter image description here

...