Python, PyQt5 is it possible to draw a rectangle without using OOP?
You need to draw a rectangle (red for example) and create a method to change its size WITHOUT using an object-oriented approach.:
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
1 answers
Sorry, but without the basics of OOP, you will not succeed! Not in the sense that it is impossible to implement what you have in mind, but in the fact that this approach is very limited and in my opinion wrong.
I'll give you an example that does almost exactly what you asked.
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_())
2
Author: S. Nick, 2020-09-16 20:21:55