Как изменить размер кнопки после изменения размера главного окна

Подскажите, пожалуйста, почему код не запускается и выдает ошибку.
Я отслеживаю размеры окна и, соответственно, изменяю размеры кнопки в зависимости от изменения размеров окна.

Вот мой код:

import sys
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtWidgets import QApplication, QMainWindow


class Window(QMainWindow):
    resized = QtCore.pyqtSignal()  # 1

    def __init__(self):
        super(Window, self).__init__()
        self.btn = QtWidgets.QPushButton(self)
        self.btn.move(190, 372)

        self.resized.connect(self.someFunction)  # 2

    def resizeEvent(self, event):
        self.resized.emit()
        return super(Window, self).resizeEvent(event)

    def someFunction(self):
        w=self.contentsRect.width()
        h=self.contentsRect.height()
        self.btn.resize(w*2, h*2)

if __name__ == '__main__':
    app = QApplication(sys.argv)
    window = Window()
    window.setGeometry(300, 100, 600, 600)
    window.show()
    sys.exit(app.exec_())

Ответы (1 шт):

Автор решения: S. Nick

QRect QWidget::contentsRect() const

Возвращает область внутри полей виджета.

и другие рекомендации.

import sys
from PyQt5.QtCore import pyqtSignal, QSize, Qt
from PyQt5.QtWidgets import QApplication, QMainWindow, QVBoxLayout, \
    QPushButton, QWidget, QStyleFactory


class Window(QMainWindow):
    resized = pyqtSignal()                                           # 1

    def __init__(self):
        super(Window, self).__init__()
        
        self.centralWidget = QWidget()                               # +++
        self.setCentralWidget(self.centralWidget)                    # +++
        
        
        self.btn = QPushButton(self)
#        self.btn.move(190, 372)
        
        layout = QVBoxLayout(self.centralWidget)                     # +
        layout.addWidget(self.btn, alignment = Qt.AlignCenter)       # +

        self.resized.connect(self.someFunction)                      # 2

    def resizeEvent(self, event):
        self.resized.emit()
        return super(Window, self).resizeEvent(event)

    def someFunction(self):
        #print(f'{self.contentsRect()}\n') #
#        w = self.contentsRect.width()
# -------------------------> vv <--------------------------------------------
        w = self.contentsRect().width()
        h = self.contentsRect().height()

# -----------------------> ?      ? <----------------------------------------
# ?      self.btn.resize(w * 2, h * 2)

        self.btn.setMinimumSize(QSize(w / 2, h / 2))                  # +
        self.btn.setMaximumSize(QSize(w / 2, h / 2))                  # +


if __name__ == '__main__':
    app = QApplication(sys.argv)
    app.setStyle(QStyleFactory.create("Fusion"))
    window = Window()
    window.resize(600, 600)
    window.show()
    sys.exit(app.exec_())

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

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

→ Ссылка