Example #1
0
class ImageViewer(QWidget):
    def __init__(self):
        super(ImageViewer, self).__init__()
        self.painter = QPainter()
        self.my_pen = QPen(QColor("red"))
        self.my_pen.setWidth(5)

        self.my_brush = QBrush(QColor("#123456"))

        self.photo = QPixmap()
        self.photo_rect = QRect()

    def set_pixmap(self, image_path):
        self.photo.load(image_path)
        self.repaint()

    def paintEvent(self, event):
        self.painter.begin(self)
        self.draw()
        self.painter.end()

    def draw(self):
        rect = self.rect()

        self.painter.setPen(self.my_pen)
        self.painter.setBrush(self.my_brush)

        photo = self.photo.scaled(QSize(rect.width(), rect.height()), Qt.KeepAspectRatio, Qt.SmoothTransformation)
        self.photo_rect.setRect(rect.x(), rect.y(), photo.width(), photo.height())
        self.photo_rect.moveCenter(rect.center())

        self.painter.drawPixmap(self.photo_rect, photo)
class MovieListDelegate(QItemDelegate):
    def __init__(self):
        super(MovieListDelegate, self).__init__()

        self.outline_pen = QPen(QColor("#444444"))
        self.background_brush = QBrush(QColor("black"))
        self.selected_brush = QBrush(QColor(76, 228, 239, 80))
        self.mouse_over_brush = QBrush(QColor("yellow"))
        self.poster_pixmap = QPixmap()
        # self.temp_poster = pixmap.scaled(MovieItem.poster_size, Qt.KeepAspectRatio, Qt.SmoothTransformation)

    def paint(self, painter, option, index):
        rect = option.rect

        poster_file = index.data(Qt.UserRole)
        self.poster_pixmap.load(poster_file)
        poster_file_rescaled = self.poster_pixmap.scaled(
            MovieItem.poster_size, Qt.KeepAspectRatio, Qt.SmoothTransformation)

        painter.setPen(self.outline_pen)
        painter.setBrush(self.background_brush)
        painter.drawRect(rect)

        # posters
        poster_rect = QRect(rect.x(), rect.y(), poster_file_rescaled.width(),
                            poster_file_rescaled.height())
        poster_rect.moveCenter(rect.center())
        painter.drawPixmap(poster_rect, poster_file_rescaled)

        if option.state & QStyle.State_Selected:
            painter.setBrush(self.selected_brush)
            painter.drawRect(rect)
Example #3
0
    def init(self):
        brush = QBrush()
        brush.setColor(Qt.black)
        brush.setStyle(Qt.SolidPattern)
        self.setBackgroundBrush(brush)

        font = QFont()
        font.setPointSize(20)
        font.setBold(True)
        self.one_play_text_item.setPlainText('One Player')
        self.two_plays_text_item.setPlainText('Two Players')
        self.one_play_text_item.setDefaultTextColor(Qt.white)
        self.two_plays_text_item.setDefaultTextColor(Qt.white)
        self.one_play_text_item.setFont(font)
        self.two_plays_text_item.setFont(font)
        self.one_play_text_item.setX(300)
        self.two_plays_text_item.setX(300)
        self.one_play_text_item.setY(self.y_list[0])
        self.two_plays_text_item.setY(self.y_list[1])
        self.addItem(self.one_play_text_item)
        self.addItem(self.two_plays_text_item)

        png = QPixmap()
        png.load('../images/%s' % TankType.PLAYER_ONE.pic)
        png = png.scaled(25, 25)
        self.indicator_item = QGraphicsPixmapItem(png)
        self.indicator_item.setRotation(90)
        self.indicator_item.setX(260)
        self.indicator_item.setY(self.y_list[self.selected] + 8)
        self.addItem(self.indicator_item)
Example #4
0
 def plot(self, filename):
     image = QPixmap()
     image.load(filename)
     item = QGraphicsPixmapItem(image)
     scene = QGraphicsScene()
     scene.addItem(item)
     self.ui.graphicsView.setScene(scene)
Example #5
0
 def set_image(self, path='', ):
     # check file exists
     pixmap = QPixmap()
     pixmap.load(path)
     # check null
     self.setPixmap(pixmap)
     self.adjustSize()
     return pixmap
Example #6
0
 def shoot(self):
     if self.tank.ammo_storage > 0:
         self.tank.ammo_storage -= 1
         ammo_png = QPixmap()
         ammo_png.load('../images/ammo.png')
         ammo_png = ammo_png.scaled(5, 8)
         ammo = AmmoItem(ammo_png, self, self.direction)
         self.scene().addItem(ammo)
Example #7
0
    def set_playback_button(self, playback_status: str):
        pixmap = QPixmap()

        if playback_status == 'Playing':
            pixmap.load(':/Images/pause.png')
        else:
            pixmap.load(':/Images/play.png')

        self.pause_btn.setIcon(pixmap)
Example #8
0
 def __init__(self, tank, direction: Direction):
     png = QPixmap()
     png.load('../images/%s' % tank.pic)
     png = png.scaled(cube_size, cube_size)
     QGraphicsPixmapItem.__init__(self, png)
     self.directions = []
     self.direction = direction
     self.tank = Tank(tank)
     self.setTransformOriginPoint(cube_size / 2, cube_size / 2)
     self.move_timer = QTimer()
     self.move_timer.setInterval(interval)
     self.move_timer.timeout.connect(self.move)
     self.move_timer.start()
Example #9
0
 def draw_terrain(self, terrain_list: list):
     size = int(cube_size / 2)
     for r, line in enumerate(terrain_list):
         for c, cell in enumerate(line):
             png = QPixmap()
             if cell.terrain == TerrainType.BRINK:
                 png.load('../images/brink.png')
             elif cell.terrain == TerrainType.STEEL:
                 png.load('../images/steel.png')
             elif cell.terrain == TerrainType.GRASS:
                 png.load('../images/grass.png')
             elif cell.terrain == TerrainType.WATER:
                 png.load('../images/water.png')
             else:
                 continue
             png = png.scaled(size, size)
             for index, state in enumerate(cell.state):
                 x = c * cube_size + index % 2 * size
                 y = r * cube_size + index // 2 * size
                 if state:
                     item = TerrainItem(png, cell.terrain)
                     if cell.terrain == TerrainType.GRASS:
                         item.setZValue(10)
                     item.setX(x)
                     item.setY(y)
                     self.addItem(item)
 def eventFilter(self, watched: QLabel, event: QEvent):
     if event.type() == QEvent.DragEnter:
         if event.mimeData().hasUrls():
             event.accept()
         else:
             event.ignore()
         return True
     elif event.type() == QEvent.DragMove:
         if event.mimeData().hasUrls():
             event.setDropAction(Qt.CopyAction)
             event.accept()
         else:
             event.ignore()
         return True
     elif event.type() == QEvent.Drop:
         path = event.mimeData().urls()[0].toLocalFile()
         pix = QPixmap()
         _ = pix.load(path)
         self.parent.setPixmap(pix)
         self.parent.org_pix = pix
         self.resizePixmap(self.parent)
         return True
     elif event.type() == QEvent.Resize:
         self.resizePixmap(self.parent)
         return True
     else:
         return False
Example #11
0
    def __init__(self, model, parent=None):
        super().__init__(parent)
        self.model = model
        self.chosen_user_record = None
        self.settings = QSettings()
        default_user = self.settings.value("default_user", 0)

        self.setWindowTitle(self.tr("pyOffer - Choose user"))
        icon = QIcon()
        icon.addFile(u":/ico")
        self.setWindowIcon(icon)

        top_level_layout = QtWidgets.QVBoxLayout(self)
        logo_label = QtWidgets.QLabel(self)
        logo = QPixmap()
        logo.load(u":/klog")
        logo_label.setPixmap(logo)
        logo_label.setAlignment(Qt.AlignCenter)
        top_level_layout.addWidget(logo_label)

        horizontal_layout = QtWidgets.QHBoxLayout()
        icon_label = QtWidgets.QLabel(self)
        pixmap = QPixmap(":/user").scaled(128, 128, Qt.KeepAspectRatio)
        icon_label.setPixmap(pixmap)
        icon_label.setAlignment(Qt.AlignCenter)
        horizontal_layout.addWidget(icon_label)

        vertical_layout = QtWidgets.QVBoxLayout()
        label_description = QtWidgets.QLabel(self)
        label_description.setText(self.tr("Please choose user:"))
        vertical_layout.addWidget(label_description)

        self.list_view = QtWidgets.QListView(self)
        self.list_view.setModel(self.model)
        self.list_view.setModelColumn(1)
        self.list_view.setSelectionBehavior(QtWidgets.QListView.SelectRows)
        self.list_view.setCurrentIndex(self.model.index(default_user, 1))
        vertical_layout.addWidget(self.list_view)

        self.buttons = QtWidgets.QDialogButtonBox(
            QtWidgets.QDialogButtonBox.Ok | QtWidgets.QDialogButtonBox.Cancel)
        self.buttons.accepted.connect(self.ok)
        self.buttons.rejected.connect(self.reject)
        vertical_layout.addWidget(self.buttons)

        horizontal_layout.addLayout(vertical_layout)
        top_level_layout.addLayout(horizontal_layout)
Example #12
0
    def load_album_cover(self, art_url: str):
        try:
            pixmap = QPixmap()

            if art_url.startswith(':/'):
                pixmap.load(art_url)
            else:
                result = request.urlopen(art_url).read()
                pixmap.loadFromData(result)

            # Clearing thread queue to load only latest cover
            if self.latest_cover_url != art_url:
                self.album_cover.setText('LOADING')
                return

            self.album_cover.setPixmap(pixmap)
            self.is_album_cover_loaded = True
        except Exception:
            pass
Example #13
0
class BackdropImageWidget(QWidget):
    def __init__(self):
        super(BackdropImageWidget, self).__init__()
        self.backdrop_image = ""
        self.painter = QPainter()

        self.pixmap = QPixmap(self.backdrop_image)
        self.fill_brush = QBrush(QColor(0, 0, 0, 210))

    def set_backdrop_image(self, image_path):
        self.backdrop_image = image_path
        self.pixmap.load(image_path)

    def paintEvent(self, event):
        self.painter.begin(self)
        self.draw()
        self.painter.end()

    def draw(self):
        rect = self.rect()

        scaled_image = self.pixmap.scaledToWidth(rect.width(),
                                                 Qt.SmoothTransformation)

        if scaled_image.height() < rect.height():
            scaled_image = self.pixmap.scaledToHeight(rect.height(),
                                                      Qt.SmoothTransformation)

        image_rect = QRect(rect.x(), rect.y(), scaled_image.width(),
                           scaled_image.height())
        image_rect.moveCenter(rect.center())
        self.painter.drawPixmap(image_rect, scaled_image)

        self.painter.setBrush(self.fill_brush)
        self.painter.setPen(Qt.NoPen)
        self.painter.drawRect(rect)
Example #14
0
class MainWindow(QMainWindow, Ui_MainWindow):
    """
    Ui 클래스 상속
    """
    def __init__(self):
        global PN
        super().__init__()
        """
        Ui 설정
        """
        self.setupUi(self)
        """
        버튼 클릭 시그널에 슬롯 추가
        """

        #QPixmap 객체 생성
        self.image1 = QPixmap()
        self.image2 = QPixmap()
        self.CAI = QPixmap()
        self.TinLogo = QPixmap()

        CAILAB_Logo = resource_path(
            "C:/Users/user/Desktop/RIB_Auto/image/CAILAB.png")
        self.CAI.load(CAILAB_Logo)
        self.CAI = self.CAI.scaled(261, 81)
        self.CAILAB.setPixmap(self.CAI)

        Tin_Logo = resource_path(
            "C:/Users/user/Desktop/RIB_Auto/image/T_in_Robotics.png")
        self.TinLogo.load(Tin_Logo)
        self.TinLogo = self.TinLogo.scaled(261, 121)
        self.Tin_Logo.setPixmap(self.TinLogo)

        #PN = self.PortNumber.text()
        #PN = str(PN)
        #self.PortNumber.setPlaceholderText("Set your password")
        #self.PortNumber.setEchMode(QLineEdit.Password);

        self.Load1.clicked.connect(self.Load1Clicked)
        self.Load2.clicked.connect(self.Load2Clicked)
        self.Predict.clicked.connect(self.PredictClicked)
        self.Tin.clicked.connect(self.TinClicked)
        self.Launch_PLC.clicked.connect(self.Launch_PLC_On_clicked)

        #버튼에 이미지 넣기
        pixmap = QPixmap(Tin_Logo)
        button_icon = QIcon(pixmap)
        self.Tin.setIcon(button_icon)

    #부재리스트 도면 업로드
    def Load1Clicked(self):
        global image1
        image1 = self.open()
        image1 = str(image1)
        self.image1.load(image1)
        self.image1 = self.image1.scaled(261, 192)
        self.Display1.setPixmap(self.image1)
        return image1

    #구조평면도 도면 업로드
    def Load2Clicked(self):
        global image2
        image2 = self.open()
        image2 = str(image2)
        self.image2.load(image2)
        self.image2 = self.image2.scaled(261, 192)
        self.Display2.setPixmap(self.image2)
        return image2

    def Launch_PLC_On_clicked(self):
        global PN
        global state
        global LP

        self.PortNumber.setRange(1, 9)
        PN = self.PortNumber.value()

        state = 0
        state = State()
        state.show()

        return 0

    #열기
    def open(self):
        fileName, _ = QFileDialog.getOpenFileName(
            self, "Open Image File", ".", "Images (*.png *.xpm *.jpg)")
        if fileName != "":
            self.load(fileName)

        return fileName

    #텍스트파일열기
    def txtopen(self):
        fileName, _ = QFileDialog.getOpenFileName(self, "Open txt File", ".",
                                                  "Predict_Result (*.txt)")
        if fileName != "":
            self.txtload(fileName)

        return fileName

    #로드
    def load(self, fileName):
        image = QImage(fileName)
        if image.isNull():
            QMessageBox.information(self, QApplication.applicationName(),
                                    "Cannot load " + fileName)

    def txtload(self, fileName):
        fileName = open(fileName, 'r')
        with fileName:
            fileName = fileName.read()

        #if fileName.isNull():
        #    QMessageBox.information(self,QApplication.applicationName(),
        #                            "Cannot load "+fileName)

    #늑근 자동화 도면해석 실행
    def PredictClicked(self):

        global r1
        global r2
        global r3
        global result

        r1 = ['1b6', '1g2', '1b1', '1b1', '1b5']
        r2 = [4553, 3426, 5789, 7773, 7353]
        r3 = [{
            'a1': 1,
            'b1': 2
        }, {
            'a2': 3,
            'b2': 4
        }, {
            'a3': 5,
            'b3': 6
        }, {
            'a4': 7,
            'b4': 8
        }, {
            'a5': 9,
            'b5': 10
        }]

        result = 0
        result = Result()
        result.show()
        #sys.exit(app.exec_())

    #트인 홈페이지 접속
    def TinClicked(self):
        url = 'http://t-in.co.kr/'
        webbrowser.open(url)
Example #15
0
class TeamSelectorDialog(QtWidgets.QDialog):
    def __init__(self, parent=None):

        if not parent:
            ptr = omui.MQtUtil.mainWindow()
            parent = wrapInstance(long(ptr), QtWidgets.QWidget)

        super(TeamSelectorDialog, self).__init__(parent)

        # Teams
        with open("V:/projects/coding/teamShirts/teams.py") as json_file:
            self.teams = json.load(json_file)
        countries = self.teams.keys()

        # Layouts
        main_layout = QtWidgets.QVBoxLayout()
        country_layout = QtWidgets.QHBoxLayout()
        league_layout = QtWidgets.QHBoxLayout()
        team_layout = QtWidgets.QHBoxLayout()
        button_layout = QtWidgets.QHBoxLayout()
        display_layout = QtWidgets.QHBoxLayout()

        # Widgets
        main_label = QtWidgets.QLabel("Team Selector:")
        self.country_cb = QtWidgets.QComboBox()
        self.country_cb.addItems(countries)
        self.country_cb.currentTextChanged.connect(self.country_click_event)
        country_label = QtWidgets.QLabel("Country: ")
        league_label = QtWidgets.QLabel("League: ")
        self.league_list = QtWidgets.QListWidget()
        self.league_list.setFixedSize(250, 100)
        self.league_list.itemClicked.connect(self.league_clicked_event)
        team_label = QtWidgets.QLabel("Team:")
        self.team_list = QtWidgets.QListWidget()
        self.team_list.setFixedSize(250, 100)
        self.team_list.itemClicked.connect(self.team_clicked_event)
        self.home_pb = QtWidgets.QPushButton("Set as &Home team")
        self.home_pb.clicked.connect(self.home_button_clicked)
        self.home_pb.setFixedWidth(120)
        self.away_pb = QtWidgets.QPushButton("Set as &Away team")
        self.away_pb.clicked.connect(self.away_button_clicked)
        self.away_pb.setFixedWidth(120)
        display_label = QtWidgets.QLabel("Team shirt: ")
        self.display_pixmap = QPixmap()
        self.display_pixmap_label = QtWidgets.QLabel()
        self.display_pixmap_label.setStyleSheet("border: 1px solid black")
        self.display_pixmap_label.setFixedSize(120, 120)
        self.display_pixmap_label.setPixmap(self.display_pixmap)
        self.display_pixmap_label.setScaledContents(True)

        # setup
        main_layout.addWidget(main_label)
        main_layout.addItem(country_layout)
        country_layout.addWidget(country_label)
        country_layout.addWidget(self.country_cb)
        main_layout.addItem(league_layout)
        league_layout.addWidget(league_label)
        league_layout.addWidget(self.league_list)
        main_layout.addItem(team_layout)
        team_layout.addWidget(team_label)
        team_layout.addWidget(self.team_list)
        main_layout.addItem(display_layout)
        display_layout.addWidget(display_label)
        display_layout.addWidget(self.display_pixmap_label)
        main_layout.addItem(button_layout)
        button_layout.addWidget(self.home_pb)
        button_layout.addWidget(self.away_pb)

        # populate default values
        self.country_clicked = "England"
        self.leagues = list(self.teams.get(self.country_clicked).keys())
        self.league_list.addItems(self.leagues)
        self.league_clicked = self.leagues[self.leagues.index(
            "Premiere League")]
        self.teams_in_league = self.teams.get(self.country_clicked).get(
            self.league_clicked)
        self.team_list.addItems(self.teams_in_league)

        self.setWindowTitle("Team Shirt Selector")
        self.setLayout(main_layout)
        self.resize(400, 300)
        self.country_cb.setCurrentIndex(0)

    def country_click_event(self):
        self.league_list.clear()
        self.country_clicked = self.country_cb.currentText()
        self.leagues = list(self.teams.get(self.country_clicked).keys())
        self.league_list.addItems(self.leagues)

    def league_clicked_event(self):
        self.team_list.clear()
        row_clicked = self.league_list.currentRow()
        self.league_clicked = self.leagues[row_clicked]
        self.teams_in_league = self.teams.get(self.country_clicked).get(
            self.league_clicked)
        self.team_list.addItems(self.teams_in_league)

    def team_clicked_event(self):
        row_clicked = self.team_list.currentRow()
        self.team_clicked = self.teams_in_league[row_clicked]
        print("team clicked: " + self.team_clicked)
        print("lower_case: " + lower_case(self.team_clicked))
        self.display_pixmap.load(self.get_thumb_file())
        self.display_pixmap_label.setPixmap(self.display_pixmap)
        #self.display_pixmap_label.show()

    def home_button_clicked(self):
        print("Thumb file: " + str(self.get_thumb_file()))
        print("Getting texture node...")
        try:
            texture_node = self.get_texture_node("home_kit_shirt")
        except NameError:
            print("Texture node only available in Maya")
            texture_node = "texture_node_from_Maya"
        print("texture node: " + str(texture_node))
        print("path to texture file: " + self.texture_file_name())
        UDIM_file = self.get_UDIM_file()
        try:
            mc.setAttr((str(texture_node) + ".fileTextureName"),
                       UDIM_file,
                       type="string")
            # mc.ogs(regenerateUVTilePreview("home_kit_shirt_TEX"))
            mel.eval("generateUvTilePreview home_kit_shirt_TEX;")
        except NameError:
            print(("setAttr only available in Maya (NameError)"))

    def away_button_clicked(self):
        print("Thumb file: " + str(self.get_thumb_file()))
        print("Getting texture node...")
        try:
            texture_node = self.get_texture_node("away_kit_shirt")
        except NameError:
            print("Texture node only available in Maya")
            texture_node = "texture_node_from_Maya"
        print("texture node: " + str(texture_node))
        print("path to texture file: " + self.texture_file_name())
        UDIM_file = self.get_UDIM_file()
        try:
            mc.setAttr((str(texture_node) + ".fileTextureName"),
                       UDIM_file,
                       type="string")
            mel.eval("generateUvTilePreview away_kit_shirt_TEX;")
        except NameError:
            print(("setAttr only available in Maya (NameError)"))

    def get_texture_node(self, selected):
        selectedNode = selected + "Shape"
        print("Selected node: " + str(selectedNode))
        shadeEng = mc.listConnections(selectedNode, type="shadingEngine")
        print("ShadeEng: " + str(shadeEng))
        materials = mc.ls(mc.listConnections(shadeEng), materials=True)
        print("Materials: " + str(materials))
        texture_node = mc.listConnections(materials)[0]
        print("Texture node: " + str(texture_node))
        return texture_node

    def get_thumb_file(self):
        thumb_file = self.texture_file_name() + "_1001.png"
        print("thumb file: " + thumb_file)
        return thumb_file

    def get_UDIM_file(self):
        UDIM_file = self.texture_file_name() + "_<UDIM>.png"
        print("UDIM file: " + str(UDIM_file))
        return UDIM_file

    def texture_file_name(self):
        country = self.country_clicked
        league = self.league_clicked
        team = self.team_clicked
        base_path = "V:\\projects\\StadiumCrowd\\Assets\\clothing\\clubShirts\\"
        texture_file_name = base_path + lower_case(
            country) + "\\" + lower_case(league) + "\\" + lower_case(team)
        return texture_file_name
Example #16
0
class RenderArea(QWidget):
    points = QPolygon([
        QPoint(10, 80),
        QPoint(20, 10),
        QPoint(80, 30),
        QPoint(90, 70)
    ])

    Line, Points, Polyline, Polygon, Rect, RoundedRect, Ellipse, Arc, Chord, \
            Pie, Path, Text, Pixmap = range(13)

    def __init__(self, parent=None):
        super(RenderArea, self).__init__(parent)

        self.pen = QPen()
        self.brush = QBrush()
        self.pixmap = QPixmap()

        self.shape = RenderArea.Polygon
        self.antialiased = False
        self.transformed = False
        self.pixmap.load(':/images/qt-logo.png')

        self.setBackgroundRole(QPalette.Base)
        self.setAutoFillBackground(True)

    def minimumSizeHint(self):
        return QSize(100, 100)

    def sizeHint(self):
        return QSize(400, 200)

    def setShape(self, shape):
        self.shape = shape
        self.update()

    def setPen(self, pen):
        self.pen = pen
        self.update()

    def setBrush(self, brush):
        self.brush = brush
        self.update()

    def setAntialiased(self, antialiased):
        self.antialiased = antialiased
        self.update()

    def setTransformed(self, transformed):
        self.transformed = transformed
        self.update()

    def paintEvent(self, event):
        rect = QRect(10, 20, 80, 60)

        path = QPainterPath()
        path.moveTo(20, 80)
        path.lineTo(20, 30)
        path.cubicTo(80, 0, 50, 50, 80, 80)

        startAngle = 30 * 16
        arcLength = 120 * 16

        painter = QPainter(self)
        painter.setPen(self.pen)
        painter.setBrush(self.brush)
        if self.antialiased:
            painter.setRenderHint(QPainter.Antialiasing)

        for x in range(0, self.width(), 100):
            for y in range(0, self.height(), 100):
                painter.save()
                painter.translate(x, y)
                if self.transformed:
                    painter.translate(50, 50)
                    painter.rotate(60.0)
                    painter.scale(0.6, 0.9)
                    painter.translate(-50, -50)

                if self.shape == RenderArea.Line:
                    painter.drawLine(rect.bottomLeft(), rect.topRight())
                elif self.shape == RenderArea.Points:
                    painter.drawPoints(RenderArea.points)
                elif self.shape == RenderArea.Polyline:
                    painter.drawPolyline(RenderArea.points)
                elif self.shape == RenderArea.Polygon:
                    painter.drawPolygon(RenderArea.points)
                elif self.shape == RenderArea.Rect:
                    painter.drawRect(rect)
                elif self.shape == RenderArea.RoundedRect:
                    painter.drawRoundedRect(rect, 25, 25, Qt.RelativeSize)
                elif self.shape == RenderArea.Ellipse:
                    painter.drawEllipse(rect)
                elif self.shape == RenderArea.Arc:
                    painter.drawArc(rect, startAngle, arcLength)
                elif self.shape == RenderArea.Chord:
                    painter.drawChord(rect, startAngle, arcLength)
                elif self.shape == RenderArea.Pie:
                    painter.drawPie(rect, startAngle, arcLength)
                elif self.shape == RenderArea.Path:
                    painter.drawPath(path)
                elif self.shape == RenderArea.Text:
                    painter.drawText(rect, Qt.AlignCenter,
                                     "PySide 2\nQt %s" % qVersion())
                elif self.shape == RenderArea.Pixmap:
                    painter.drawPixmap(10, 10, self.pixmap)

                painter.restore()

        painter.setPen(self.palette().dark().color())
        painter.setBrush(Qt.NoBrush)
        painter.drawRect(QRect(0, 0, self.width() - 1, self.height() - 1))
class RenderArea(QWidget):
    points = QPolygon(
        [QPoint(10, 80),
         QPoint(20, 10),
         QPoint(80, 30),
         QPoint(90, 70)])

    Line, Points, Polyline, Polygon, Rect, RoundedRect, Ellipse, Arc, Chord, \
            Pie, Path, Text, Pixmap = range(13)

    def __init__(self, parent=None):
        super(RenderArea, self).__init__(parent)

        self.pen = QPen()
        self.brush = QBrush()
        self.pixmap = QPixmap()

        self.shape = RenderArea.Polygon
        self.antialiased = False
        self.transformed = False
        self.pixmap.load(':/images/qt-logo.png')

        self.setBackgroundRole(QPalette.Base)
        self.setAutoFillBackground(True)

    def minimumSizeHint(self):
        return QSize(100, 100)

    def sizeHint(self):
        return QSize(400, 200)

    def setShape(self, shape):
        self.shape = shape
        self.update()

    def setPen(self, pen):
        self.pen = pen
        self.update()

    def setBrush(self, brush):
        self.brush = brush
        self.update()

    def setAntialiased(self, antialiased):
        self.antialiased = antialiased
        self.update()

    def setTransformed(self, transformed):
        self.transformed = transformed
        self.update()

    def paintEvent(self, event):
        rect = QRect(10, 20, 80, 60)

        path = QPainterPath()
        path.moveTo(20, 80)
        path.lineTo(20, 30)
        path.cubicTo(80, 0, 50, 50, 80, 80)

        startAngle = 30 * 16
        arcLength = 120 * 16

        painter = QPainter(self)
        painter.setPen(self.pen)
        painter.setBrush(self.brush)
        if self.antialiased:
            painter.setRenderHint(QPainter.Antialiasing)

        for x in range(0, self.width(), 100):
            for y in range(0, self.height(), 100):
                painter.save()
                painter.translate(x, y)
                if self.transformed:
                    painter.translate(50, 50)
                    painter.rotate(60.0)
                    painter.scale(0.6, 0.9)
                    painter.translate(-50, -50)

                if self.shape == RenderArea.Line:
                    painter.drawLine(rect.bottomLeft(), rect.topRight())
                elif self.shape == RenderArea.Points:
                    painter.drawPoints(RenderArea.points)
                elif self.shape == RenderArea.Polyline:
                    painter.drawPolyline(RenderArea.points)
                elif self.shape == RenderArea.Polygon:
                    painter.drawPolygon(RenderArea.points)
                elif self.shape == RenderArea.Rect:
                    painter.drawRect(rect)
                elif self.shape == RenderArea.RoundedRect:
                    painter.drawRoundedRect(rect, 25, 25, Qt.RelativeSize)
                elif self.shape == RenderArea.Ellipse:
                    painter.drawEllipse(rect)
                elif self.shape == RenderArea.Arc:
                    painter.drawArc(rect, startAngle, arcLength)
                elif self.shape == RenderArea.Chord:
                    painter.drawChord(rect, startAngle, arcLength)
                elif self.shape == RenderArea.Pie:
                    painter.drawPie(rect, startAngle, arcLength)
                elif self.shape == RenderArea.Path:
                    painter.drawPath(path)
                elif self.shape == RenderArea.Text:
                    painter.drawText(rect, Qt.AlignCenter,
                                     "PySide 2\nQt %s" % qVersion())
                elif self.shape == RenderArea.Pixmap:
                    painter.drawPixmap(10, 10, self.pixmap)

                painter.restore()

        painter.setPen(self.palette().dark().color())
        painter.setBrush(Qt.NoBrush)
        painter.drawRect(QRect(0, 0, self.width() - 1, self.height() - 1))