Как сделать так, чтобы мои виджеты не появлялись в центре - PullRequest
0 голосов
/ 26 апреля 2020

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

all widgets in the centre

Я хочу, чтобы они были размещены таким образом на изображении ниже, а не все виджеты в центре, как на изображении выше:

all widgets at corner and one at center

Как видите, верхний находится в углах, а один прямоугольник в середине - в центре. Я хочу, чтобы они были размещены там, где я хочу, между ними или в углу, но в то же время, не теряя сетки и не добавляя интервалы, так как при растяжении по горизонтали / вертикали пространство между виджеты. Как видите, растягивая приложение.

Вот мой код:

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(260)
        label.setStyleSheet("background-color: qlineargradient(spread:pad, x1:0.994, y1:0.527, x2:0.999682, y2:0.005, stop:0 rgba(246, 246, 246, 255), stop:1 rgba(255, 248, 248, 255));")

        lineedit = QtWidgets.QLineEdit()
        lineedit.setFixedWidth(310)
        lineedit.setFixedHeight(30)
        lineedit.setStyleSheet("""
        background-color: #ffffff; 
        border-width: 1px; 
        border-color: rgb(200, 200, 200); 
        border-style: solid;
        border-radius: 4;
        padding: 6px 12px;
        color: rgb(50,50,50);
        font-family: SourceSansPro-Regular;
        font-size: 12px;
        """)
        f = lineedit.font()
        f.setLetterSpacing(QtGui.QFont.PercentageSpacing, 100)
        lineedit.setFont(f)

        button = QtWidgets.QPushButton("New Product")
        button.setFixedSize(110, 28)
        button.setCursor(QCursor(QtCore.Qt.PointingHandCursor))
        button.setStyleSheet("""
        QPushButton {
        background-color: #474767;
        border: none;
        color: white;
        text-align: center;
        font-size: 14px;
        padding: 7px 10px;
        border-radius: 3;
        font-family: Source Sans Pro SemiBold;
        }
        QPushButton:hover{
        background-color: #474757;
        }
        """)

        button1 = QtWidgets.QPushButton("Delete Product")
        button1.setFixedSize(110, 28)
        button1.setCursor(QCursor(QtCore.Qt.PointingHandCursor))
        button1.setStyleSheet("""
        QPushButton {
        background-color: #474767;
        border: none;
        color: white;
        text-align: center;
        font-size: 14px;
        padding: 7px 10px;
        border-radius: 3;
        font-family: Source Sans Pro SemiBold;
        }
        QPushButton:hover{
        background-color: #474757;
        }
        """)

        button2 = QtWidgets.QPushButton("Next product")
        button2.setFixedSize(110, 28)
        button2.setCursor(QCursor(QtCore.Qt.PointingHandCursor))
        button2.setStyleSheet("""
        QPushButton {
        background-color: #474767;
        border: none;
        color: white;
        text-align: center;
        font-size: 14px;
        padding: 7px 10px;
        border-radius: 3;
        font-family: Source Sans Pro SemiBold;
        }
        QPushButton:hover{
        background-color: #474757;
        }
        """)

        widget = QtWidgets.QLabel()
        widget.setFixedSize(180, 180)
        widget.setStyleSheet("""background-color: rgb(200, 255, 250)""")

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

        right_container = QtWidgets.QWidget()

        glay = QtWidgets.QGridLayout(right_container)
        glay.addWidget(lineedit, 0, 0)
        glay.addWidget(widget, 1, 0)
        glay.addWidget(button, 2, 0)

        glay.addWidget(button1, 2, 1)

        glay.addWidget(button2, 0, 1)

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


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


if __name__ == "__main__":
    main()


Я перепробовал много вещей, но в результате возникли ошибки. Я только что исчерпал логи c, о том, как этого добиться.

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

Редактировать 1: Я пробовал обе эти вещи, которые было предложено в комментариях:

1) Добавление glay.addWidget(lineedit, 0, 0, alignment = QtCore.Qt.AlignTop | QtCore.Qt.AlignLeft). Он выдает тот же результат даже после применения изменений.

2) Однако использование QVBoxLayout не полезно. Есть что-то, что не позволяет мне добавлять виджеты в прямоугольник, который я рисую ниже. Потому что я не могу добавлять виджеты со стороны прямоугольника. (См. Изображение ниже ...)

enter image description here

1 Ответ

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

void QGridLayout :: setColumnStretch (int column, int stretch)

Устанавливает коэффициент растяжения столбца столбца для растяжения. Первый столбец имеет номер 0.


void QGridLayout :: setRowStretch (int row, int stretch)

Устанавливает коэффициент растяжения строки строки для растяжения. Первый ряд номер 0.

import sys
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtGui import QCursor
from PyQt5.QtWidgets import QFrame
from PyQt5.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(260)
        label.setStyleSheet("background-color: qlineargradient(spread:pad, x1:0.994, y1:0.527, x2:0.999682, y2:0.005, stop:0 rgba(246, 246, 246, 255), stop:1 rgba(255, 248, 248, 255));")

        lineedit = QtWidgets.QLineEdit()
        lineedit.setFixedWidth(310)
        lineedit.setFixedHeight(30)
        lineedit.setStyleSheet("""
        background-color: #ffffff; 
        border-width: 1px; 
        border-color: rgb(200, 200, 200); 
        border-style: solid;
        border-radius: 4;
        padding: 6px 12px;
        color: rgb(50,50,50);
        font-family: SourceSansPro-Regular;
        font-size: 12px;
        """)
        f = lineedit.font()
        f.setLetterSpacing(QtGui.QFont.PercentageSpacing, 100)
        lineedit.setFont(f)

        button = QtWidgets.QPushButton("New Product")
        button.setFixedSize(110, 28)
        button.setCursor(QCursor(QtCore.Qt.PointingHandCursor))
        button.setStyleSheet("""
        QPushButton {
        background-color: #474767;
        border: none;
        color: white;
        text-align: center;
        font-size: 14px;
        padding: 7px 10px;
        border-radius: 3;
        font-family: Source Sans Pro SemiBold;
        }
        QPushButton:hover{
        background-color: #474757;
        }
        """)

        button1 = QtWidgets.QPushButton("Delete Product")
        button1.setFixedSize(110, 28)
        button1.setCursor(QCursor(QtCore.Qt.PointingHandCursor))
        button1.setStyleSheet("""
        QPushButton {
        background-color: #474767;
        border: none;
        color: white;
        text-align: center;
        font-size: 14px;
        padding: 7px 10px;
        border-radius: 3;
        font-family: Source Sans Pro SemiBold;
        }
        QPushButton:hover{
        background-color: #474757;
        }
        """)

        button2 = QtWidgets.QPushButton("Next product")
        button2.setFixedSize(110, 28)
        button2.setCursor(QCursor(QtCore.Qt.PointingHandCursor))
        button2.setStyleSheet("""
        QPushButton {
        background-color: #474767;
        border: none;
        color: white;
        text-align: center;
        font-size: 14px;
        padding: 7px 10px;
        border-radius: 3;
        font-family: Source Sans Pro SemiBold;
        }
        QPushButton:hover{
        background-color: #474757;
        }
        """)

        widget = QtWidgets.QLabel()
#        widget.setFixedSize(180, 180)
        widget.setMinimumHeight(180)                                           # +++

        widget.setStyleSheet("""background-color: rgb(200, 255, 250)""")

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

        right_container = QtWidgets.QWidget()

# ++ vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
        glay = QtWidgets.QGridLayout(right_container)
        glay.addWidget(lineedit, 0, 0)
        glay.addWidget(button2, 0, 2)

        glay.addWidget(widget, 2, 0, 1, 3)                              # 2

        glay.addWidget(button, 4, 0)                                    # 4
        glay.addWidget(button1, 4, 2)

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

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


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


if __name__ == "__main__":
    main()  

enter image description here

...