Для начала определите базовый класс Shape, в котором хранится длина фигуры, ее положение и (случайным образом сгенерированный) цвет. Оттуда вы можете унаследовать эти основные свойства и дополнительно указать дополнительные фигуры. Как минимум, ваша программа должна поддерживать квадраты, прямоугольники, треугольники, круги и эллипсы. Каждая форма должна определять свой собственный класс в иерархии наследования, основанной на Shape. Напомним, что наследование часто охватывает несколько уровней, поэтому рассмотрите и реализуйте соответствующую схему наследования. Классы, которые определяют различные формы, должны дополнительно определять класс Shape, добавляя дополнительные необходимые атрибуты, соответствующим образом вызывая родительские конструкторы во время инициализации, и включая метод для рисования формы с использованием экземпляра QPainter, предоставленного в качестве параметра. Обратите внимание, что классы фигур полностью инкапсулируют концепции форм, включая графический графический чертеж. Предоставляя уже используемый экземпляр QPainter для методов рисования фигур, <- код, который я предоставил, должен делать то, о чем просит вопрос выше, но я не уверен, что я делаю это правильно и хочу проверитьесли мой текущий код делает это. </p>
Когда пользователь щелкает где-то в окне (на это указывает вызов mousePressEvent), создайте произвольно новый объект Shape, который будет расположен в координатах щелчкаи добавьте эту фигуру в список элементов для рисования, который должен быть атрибутом вашего класса. Конструктор объекта Shape (в сотрудничестве с его родительскими конструкторами) должен установить все его атрибуты, включая координаты, цвет и размер. Не стесняйтесь применять разумные ограничения для формы размеров. Каждый раз, когда окно рисуется (потому что что-то вызвало вызов paintEvent), каждая из фигур, созданных до сих пор, должна быть нарисована. Поскольку они находятся в списке (см. Ниже), вы можете перебирать их с помощью цикла и рисовать каждую фигуру. Прелесть полиморфизма в том, что вы можете обращаться со всеми ними как с базовыми фигурами и просить их рисовать сами, потому что каждый из них реализует метод рисования, который принимает экземпляр QPainter (возможно, один из paintEvent в ShapeDrawer.py) в качестве параметра. Обратите внимание, что вы, должно быть, уже активировали объект Painter, вызвав его метод begin, прежде чем передать его в метод рисования фигуры. <- Я понятия не имею, как завершить номер 2 с моим текущим кодом, и был бы очень признателен, если бы кто-то мог помочь мне сномер два, потому что меня смущают часть щелчков мышью и два в целом. </p>
В целом, я сделал номер один с предоставленным кодом и хочу убедиться, что он правильный и не имеетПонять, как сделать номер два и нужна помощь.
Код, который я предоставил, - это то, что я пробовал.
import sys, random
from PyQt5 import QtGui, QtCore
from PyQt5.QtWidgets import QApplication, QMainWindow
from PyQt5.QtGui import QPainter, QPainterPath, QBrush, QPen
from PyQt5.QtCore import Qt
class Window(QMainWindow):
def __init__(self):
super().__init__()
self.title = "Main Window"
self.right= 200
self.left= 200
self.width = 500
self.height = 500
self.Window()
def Window(self):
self.setWindowTitle(self.title)
self.setGeometry(self.right, self.left, self.width, self.height)
self.show()
class shape():
def __init__(self,length,position,color):
self.length=length
self.position=position
self.color= random.choice(colors)
class circle(shape):
def paintEvent(self, event):
painter = QPainter(self)
painter.setPen(QPen(Qt.red, 4 , Qt.SolidLine))
painter.drawEllipse(20, 20, 200, 200)
class rectangle(shape):
def paintEvent(self, event):
painter = QPainter(self)
painter.setPen(QPen(Qt.yellow, 7, Qt.DotLine))
painter.drawRect(10, 20, 100, 200)
class ellipse(shape):
def paintEvent(self, event):
painter = QPainter(self)
painter.setPen(QPen(Qt.black, 4, Qt.SolidLine))
painter.setBrush(QBrush(Qt.black, Qt.SolidPattern))
painter.drawEllipse(20, 20, 200, 100)
class triangle(shape):
def paintEvent(self, event):
painter = QPainter()
path = QPainterPath()
painter.begin(self)
painter.setRenderHint(QPainter.Antialiasing)
painter.setPen(QtCore.Qt.red)
path.lineTo(180, 300)
path.lineTo(200, 100)
path.lineTo(10, 50)
painter.drawPath(path)
class square(shape):
def paintEvent(self, event):
painter = QPainter()
path = QPainterPath()
painter.begin(self)
painter.setRenderHint(QPainter.Antialiasing)
painter.setPen(QtCore.Qt.red)
path.lineTo(20, 12)
path.lineTo(20, 28)
path.lineTo(36, 28)
path.lineTo(36,12)
path.lineTo(20,12)
painter.drawPath(path)
App = QApplication(sys.argv)
window = Window()
sys.exit(App.exec())