TransWikia.com

Почему не центрируется виджет?

Stack Overflow на русском Asked by or latym on December 7, 2021

Я пытаюсь сделать так, чтобы все виджеты были отцентрированы, но почему-то у меня это не получилось сделать.

Можно ли это сделать короткой строкой и применять к любому размеру виджета?

from PyQt5 import QtWidgets, QtCore, QtGui
import sys

class Test(QtWidgets.QWidget):
    def __init__(self):
        super().__init__()
        self.resize(500, 500)

        lay = QtWidgets.QVBoxLayout(self)
        lay.setSpacing(0)
        lay.setContentsMargins(0, 0, 0, 0)

        main = QtWidgets.QWidget(self)
        #main.setStyleSheet("background:{};".format(color1))
        lay.addWidget(main)
        main_lay = QtWidgets.QGridLayout(main)
        main_lay.setSpacing(0)
        main_lay.setContentsMargins(0, 0, 0, 0)

        center = QtWidgets.QWidget(self)
        center.setStyleSheet("background:{};".format('blue'))
        center.setFixedWidth(100)
        center.setFixedHeight(100)

        center2 = QtWidgets.QWidget(self)
        center2.setStyleSheet("background:{};".format('green'))
        center2.setFixedWidth(300)
        center2.setFixedHeight(300)

        back = QtWidgets.QWidget(self)
        back.setStyleSheet("background:{};".format('red'))
        back.setFixedWidth(400)
        back.setFixedHeight(400)

        main_lay.addWidget(back, 0, 0, 1, 1)
        main_lay.addWidget(center2, 0, 0, 1, 1)
        main_lay.addWidget(center, 0, 0, 1, 1)


if __name__ == "__main__":
    app = QtWidgets.QApplication(sys.argv)
    w = Test()
    w.show()

One Answer

Попробуйте так:

from PyQt5 import QtWidgets, QtCore, QtGui
import sys

class Test(QtWidgets.QWidget):
    def __init__(self):
        super().__init__()
        self.resize(500, 500)

        lay = QtWidgets.QVBoxLayout(self)
        lay.setSpacing(0)
        lay.setContentsMargins(0, 0, 0, 0)

        main = QtWidgets.QWidget(self)
        #main.setStyleSheet("background:{};".format(color1))
        lay.addWidget(main)
        main_lay = QtWidgets.QGridLayout(main)
        main_lay.setSpacing(0)
        main_lay.setContentsMargins(0, 0, 0, 0)

        center = QtWidgets.QWidget(self)
        center.setStyleSheet("background:{};".format('blue'))
        center.setFixedWidth(100)
        center.setFixedHeight(100)

        center2 = QtWidgets.QWidget(self)
        center2.setStyleSheet("background:{};".format('green'))
        center2.setFixedWidth(300)
        center2.setFixedHeight(300)

        back = QtWidgets.QWidget(self)

        back.setStyleSheet("background:{};".format('red'))
        back.setFixedWidth(400)
        back.setFixedHeight(400)

        main_lay.addWidget(back,    0, 0, 1, 1, alignment=QtCore.Qt.AlignCenter)  # alignment
        main_lay.addWidget(center2, 0, 0, 1, 1, alignment=QtCore.Qt.AlignCenter)  # alignment
        main_lay.addWidget(center,  0, 0, 1, 1, alignment=QtCore.Qt.AlignCenter)  # alignment


if __name__ == "__main__":
    app = QtWidgets.QApplication(sys.argv)
    w = Test()
    w.show()
sys.exit(app.exec_())    

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

Answered by S. Nick on December 7, 2021

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