Python, PyQt5 возможно ли нарисовать прямоугольник не используя ООП?
Нужно нарисовать (красный например) прямоугольник и создать метод для изменения его размера НЕ используя при этом объектно-ориентированный подход:
import sys
from PyQt5.QtWidgets import QApplication, QWidget, QVBoxLayout, QPushButton
prg = QApplication(sys.argv)
window = QWidget()
base_layer = QVBoxLayout()
rectangle_widget = QWidget() # В этом виджете разместьить прямоугольник
base_layer.addWidget(rectangle_widget)
window.setLayout(base_layer)
window.show()
sys.exit(prg.exec())
def change_rectangle_size(width): # этот метод должен менять размер прямоугольника
pass
Ответы (1 шт):
Автор решения: S. Nick
→ Ссылка
Извините, но без азов ООП у вас ничего не получится! Не смысле, что нельзя реализовать то, что вы задумали, а в том, что этот подход очень ограниченный и по моему мнению неправильный.
Я вам предложу пример, который делает почти то, что вы спросили.
import sys
from PyQt5.QtWidgets import QApplication, QWidget, QVBoxLayout, QSpinBox
from PyQt5.QtGui import QPen, QPainter
from PyQt5.QtCore import Qt
class Demo(QWidget):
def __init__(self):
super(Demo, self).__init__()
self.w, self.h = 400, 200
self.pen = QPen()
self.pen.setColor(Qt.green)
self.pen.setWidth(3)
spinbox = QSpinBox()
spinbox.setRange(100, 400)
spinbox.setSingleStep(10)
spinbox.setValue(100)
spinbox.valueChanged.connect(self.change_rectangle_size)
base_layer = QVBoxLayout(self)
base_layer.addWidget(spinbox, alignment=Qt.AlignLeft | Qt.AlignTop)
def paintEvent(self, event):
painter = QPainter(self)
painter.setPen(self.pen)
painter.drawRect(100, 170, self.w, self.h)
def change_rectangle_size(self, value):
self.w, self.h = value, value/2
self.update()
if __name__ == '__main__':
app = QApplication(sys.argv)
demo = Demo()
demo.resize(600, 600)
demo.show()
sys.exit(app.exec_())
