Как изменить размер кнопки после изменения размера главного окна
Подскажите, пожалуйста, почему код не запускается и выдает ошибку.
Я отслеживаю размеры окна и, соответственно, изменяю размеры кнопки в зависимости от изменения размеров окна.
Вот мой код:
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_())