Почему изменение размера Dynami c не работает, если Layout подключен к родителю? - PullRequest
0 голосов
/ 11 апреля 2020

Мой код

import sys
from PyQt5.QtWidgets import *

class Test(QWidget):
    def __init__(self):
        super().__init__()

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

        widget_1 = QWidget()
        lay.addWidget(widget_1)

        lay_2 = QVBoxLayout(widget_1)
        label_1 = QLabel(widget_1)
        label_1.setText("Test - 1")
        label_1.setStyleSheet('background:{};margin:100'.format('yellow'))
        lay_2.addWidget(label_1)

        self.radio = QRadioButton()
        self.radio.setSizePolicy(QSizePolicy.Minimum, QSizePolicy.Minimum)
        self.radio.setStyleSheet('background:{};margin:100'.format('black'))
        lay_2.addWidget(self.radio)

        #face_widget = QWidget(self)
        #face_widget.resize(widget_1.sizeHint().width(), widget_1.sizeHint().height())
        #widget_2 = QWidget(face_widget)

        widget_2 = QWidget(self)
        widget_2.setStyleSheet('background:{}'.format('brown'))
        widget_2.move(10,10)
        #widget_2.resize(65, 55)

        widget_2.raise_()

        lay_3 = QVBoxLayout(widget_2)

        lay_3.setSpacing(0)
        lay_3.setContentsMargins(0, 0, 0, 0)
        label_2 = QLabel(widget_2)
        label_2.setText("Test - 2")
        label_2.setStyleSheet('background:{}'.format('blue'))
        lay_3.addWidget(label_2)

        label_3 = QLabel(widget_2)
        label_3.setText("Test - 3")
        label_3.setStyleSheet('background:{}; padding:10'.format('red'))
        lay_3.addWidget(label_3)






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

Моя проблема в том, что widget_2 не хочет динамически изменять свой размер, когда макет подключен к родителю.

Я не знаю, с чем это связано с. И я не знаю, как это исправить

Я получаю

enter image description here

Мне нужно

enter image description here

Мне нужно lay, потому что оно определяет начальную точку widget_2

Мне нужно что-то, что lay и widget_2 могли бы динамически изменять их размер в зависимости от на содержание

И мне нужно иметь возможность нажать на radio без отслеживания его положения в пространстве. потому что если будет много кнопок, то пишите для каждого

        self.x1r1, self.x2r1, self.y1r1, self.y2r1 = ..., ..., ..., ...     
        self.x1r2, self.x2r2, self.y1r2, self.y2r2 = ..., ..., ..., ...
        self.x1r3, self.x2r3, self.y1r3, self.y2r3 = ..., ..., ..., ...
    def onButtonClicked(self, id):
        print(id)

    def resizeEvent(self, event):                                       
        g1 = self.radio.geometry()
        self.x1r1 = g1.x() 
        self.y1r1 = g1.y()
        self.x2r1 = g1.x() + g1.width()
        self.y2r1 = g1.y() + g1.height()


        super().resizeEvent(event)  

    def mousePressEvent(self, event):     
        x = event.pos().x()
        y = event.pos().y()
        if (self.x1r1 < x < self.x2r1) and (self.y1r1 < y < self.y2r1):
            self.radio.click()

, потребляющего слишком много энергии.

1 Ответ

0 голосов
/ 12 апреля 2020

Я нашел ответ. Но это обходной путь

import sys
from PyQt5.QtWidgets import *

class Test(QWidget):
    def __init__(self):
        super().__init__()

        widget_block = QWidget(self)

        widget_block.setStyleSheet('background:{};'.format('yellow'))

        lay_2 = QVBoxLayout(widget_block)

        lay_2.setSpacing(0)
        lay_2.setContentsMargins(0, 0, 0, 0)


        label_1 = QLabel(widget_block)
        label_1.setText("Test - 1")
        label_1.setStyleSheet('background:{};margin:100'.format('red'))
        lay_2.addWidget(label_1)

        self.radio = QRadioButton(widget_block)
        self.radio.setSizePolicy(QSizePolicy.Minimum, QSizePolicy.Minimum)
        self.radio.setStyleSheet('background:{};margin:100'.format('black'))
        lay_2.addWidget(self.radio)



        self.resize(widget_block.sizeHint().width(), widget_block.sizeHint().height())
        widget_2 = QWidget(self)


        widget_2.setStyleSheet('background:{}'.format('brown'))
        widget_2.move(10,10)

        widget_2.raise_()

        lay_3 = QVBoxLayout(widget_2)

        lay_3.setSpacing(0)
        lay_3.setContentsMargins(0, 0, 0, 0)
        label_2 = QLabel(widget_2)
        label_2.setText("Test - 2")
        label_2.setStyleSheet('background:{}'.format('blue'))
        lay_3.addWidget(label_2)

        label_3 = QLabel(widget_2)
        label_3.setText("Test - 3")
        label_3.setStyleSheet('background:{}; padding:10'.format('red'))
        lay_3.addWidget(label_3)


if __name__ == "__main__":
    app = QApplication(sys.argv)
    w = Test()
    w.show()
    sys.exit(app.exec_())
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...