setSizePolicy () с QSizePolicy.Expanding не работает: дочерний элемент не расширяется до размера родительского элемента - PullRequest
0 голосов
/ 20 января 2019

Согласно http://doc.qt.io/qt-5/qsizepolicy.html#Policy-enum, настройка политики размера виджета имеет следующий эффект:

sizeHint () - разумный размер, но виджет может быть уменьшен и все еще быть полезным. Виджет может использовать дополнительное пространство, поэтому он должен получить как можно больше места (например, горизонтальное направление горизонтальный слайдер).

Итак, я ожидаю, что желтый виджет ниже заполнит зеленый виджет, но этого не происходит. Что я сделал не так?

enter image description here

import sys

from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
from PyQt5.QtCore import *

class Yellow(QWidget):

    def __init__(self, *args):
        super().__init__(*args)

        # Set palette
        bg = QPalette()
        bg.setColor(QPalette.Window, Qt.yellow)
        self.setAutoFillBackground(True)
        self.setPalette(bg)

        self.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding)

class Green(QWidget):

    def __init__(self, *args):
        super().__init__(*args)

        # Set palette
        bg = QPalette()
        bg.setColor(QPalette.Window, Qt.green)
        self.setAutoFillBackground(True)
        self.setPalette(bg)

        self.yellow = Yellow(self)

class App(QMainWindow):

    def __init__(self):
        super().__init__()
        self.title = 'PyQt5'
        self.left = 10
        self.top = 10
        self.width = 200
        self.height = 200 
        self.initUI()

    def initUI(self):
        self.setWindowTitle(self.title)
        self.setGeometry(self.left, self.top, self.width, self.height)

        self.green = Green(self)
        self.green.resize(184, 154)
        self.green.move(10, 10)

        self.show()

if __name__ == '__main__':
    app = QApplication(sys.argv)

    ex = App()
    sys.exit(app.exec_())

1 Ответ

0 голосов
/ 20 января 2019

Использовать макет:

class Green(QWidget):

    def __init__(self, *args):
        super().__init__(*args)

        # Set palette
        bg = QPalette()
        bg.setColor(QPalette.Window, Qt.green)
        self.setAutoFillBackground(True)
        self.setPalette(bg)

        self.yellow = Yellow(self)
        self.myLayout = QGridLayout()
        self.myLayout.addWidget(self.yellow)
        self.setLayout(self.myLayout)

Результат:

result

Если вы добавите self.myLayout.setContentsMargins(0,0,0,0), желтый виджет полностью закроет зеленый:

result2

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...