PyQT5 размещение графического виджета

Как разместить в данном коде виджет, чтобы на нем передвигать графические элементы при нажатии на клавишу (например стрелок) ?

import sys
from PyQt5.QtWidgets import QWidget, QMainWindow, QApplication


class MainWindow(QMainWindow):
    def __init__(self):
        super().__init__()
        
        self.centralWidget = QWidget()
        self.setCentralWidget(self.centralWidget)

StyleSheet = """
QMainWindow{
    border-image: url(11.png) 0 0 0 0 stretch stretch;
}
"""

if __name__ == "__main__":
    app = QApplication(sys.argv)
    app.setStyleSheet(StyleSheet)                                  
    w = MainWindow()
    w.setWindowTitle("Title MainWindow")
    w.resize(702, 343)
    w.show()
    sys.exit(app.exec_())

Ответы (1 шт):

Автор решения: S. Nick

То, что вы задумали, может выглядеть примерно так. Нажимайте на стрелочки.

from PyQt5.Qt import *


class Example(QMainWindow):
    def __init__(self):
        super().__init__()

        self.setFixedSize(700, 400)
        self.setMouseTracking(True)
        self.x = 300
        self.y = 200


    def up(self):
        self.update()

    def keyPressEvent(self, event):
        if event.key() == Qt.Key_Left:   
            self.x -= 5
        elif event.key() == Qt.Key_Right: 
            self.x += 5
        elif event.key() == Qt.Key_Up: 
            self.y -= 5
        elif event.key() == Qt.Key_Down:
            self.y += 5
        QTimer.singleShot(100, self.up)        

    def paintEvent(self, event):
        if self.x <= -45:
            self.x = 725
        elif self.x >= 725:
            self.x = -45
        if self.y <= -25:
            self.y = 415
        elif self.y >= 415:
            self.y = -25
        self.qp = QPainter()
        self.qp.begin(self)
        self.drawFlag()
        self.qp.end()

    def drawFlag(self):
        self.qp.setBrush(QColor(150, 75, 0))
        self.qp.drawEllipse(self.x, self.y, 50, 20)
        self.qp.setBrush(QColor(0, 255, 255))
        self.qp.drawEllipse(self.x + 10, self.y - 10, 30, 20)


StyleSheet = """
QMainWindow{
    border-image: url(i-700x400.jpg) 0 0 0 0 stretch stretch;
}
"""

if __name__ == '__main__': 
    import sys
    app = QApplication(sys.argv)
    app.setStyleSheet(StyleSheet)
    w = Example()
    w.show()
    sys.exit(app.exec_())

введите сюда описание изображения

→ Ссылка