scène présentée dans la Section 1, Tous en scène !, sans nous préoccuper pour le
moment des interactions avec les widgets placés dans notre boîte à outils.
# -*- coding: utf-8 -*# test_scene.py
import sys
from Ui_test_scene import Ui_MainWindow
from PyQt5.QtWidgets import QMainWindow
from PyQt5.QtCore import Qt
from PyQt5.QtGui import QBrush, QPainter
from PyQt5.QtWidgets import QApplication, QGraphicsScene,
QGraphicsView, \
QGraphicsItem, QGraphicsEllipseItem
class MainWindow(QMainWindow, Ui_MainWindow):
def __init__(self, parent=None): super(MainWindow,self).__init__(parent)
self.setupUi(self) self.scene = QGraphicsScene() self.remplirScene() self.show()
for vue in (self.vuePrincipale, self.vueGlobale): vue.setScene(self.scene)
vue.setRenderHints(QPainter.Antialiasing) vue.fitInView(self.rectGris,
Qt.KeepAspectRatio)
self.vueGlobale.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff)
self.vueGlobale.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOff)
self.vuePrincipale.setDragMode(QGraphicsView.RubberBandDrag) def
remplirScene(self): scene = self.scene rectGris =
scene.addRect(0,0,200,150,brush=QBrush(Qt.lightGray)) self.rectGris = rectGris
self.texte = scene.addText("") dy = rectGris.rect().height()self.texte.sceneBoundingRect().height() self.texte.setPos(rectGris.x(),rectGris.y() + dy)
self.texte.setDefaultTextColor(Qt.cyan) scene.addItem(self.texte) d = 48. # diametre
d/2,d,d, brush=QBrush(Qt.yellow)) yeux = [QGraphicsEllipseItem(-ox/2.,oy/2.,ox,oy,parent=smiley) \ for i in range(2)] yeux[0].setPos(-d/6,-d/8)
yeux[1].setPos(+d/6,-d/8) brush = QBrush(Qt.black) for oeil in yeux:
oeil.setBrush(brush) smiley.setPos(rectGris.mapToScene(rectGris.rect().center()))
smiley.setRotation(20) smiley.setScale(1.5) for item in scene.items():
item.setFlag(QGraphicsItem.ItemIsMovable)
item.setFlag(QGraphicsItem.ItemIsSelectable) if __name__ == '__main__': app =
QApplication(sys.argv) mainWindow = MainWindow() sys.exit(app.exec_())
Voici quelques explications (pour la création des éléments de la scène, se référer à la
Section 1, Tous en scène !).
217
moment des interactions avec les widgets placés dans notre boîte à outils.
# -*- coding: utf-8 -*# test_scene.py
import sys
from Ui_test_scene import Ui_MainWindow
from PyQt5.QtWidgets import QMainWindow
from PyQt5.QtCore import Qt
from PyQt5.QtGui import QBrush, QPainter
from PyQt5.QtWidgets import QApplication, QGraphicsScene,
QGraphicsView, \
QGraphicsItem, QGraphicsEllipseItem
class MainWindow(QMainWindow, Ui_MainWindow):
def __init__(self, parent=None): super(MainWindow,self).__init__(parent)
self.setupUi(self) self.scene = QGraphicsScene() self.remplirScene() self.show()
for vue in (self.vuePrincipale, self.vueGlobale): vue.setScene(self.scene)
vue.setRenderHints(QPainter.Antialiasing) vue.fitInView(self.rectGris,
Qt.KeepAspectRatio)
self.vueGlobale.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff)
self.vueGlobale.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOff)
self.vuePrincipale.setDragMode(QGraphicsView.RubberBandDrag) def
remplirScene(self): scene = self.scene rectGris =
scene.addRect(0,0,200,150,brush=QBrush(Qt.lightGray)) self.rectGris = rectGris
self.texte = scene.addText("") dy = rectGris.rect().height()self.texte.sceneBoundingRect().height() self.texte.setPos(rectGris.x(),rectGris.y() + dy)
self.texte.setDefaultTextColor(Qt.cyan) scene.addItem(self.texte) d = 48. # diametre
d/2,d,d, brush=QBrush(Qt.yellow)) yeux = [QGraphicsEllipseItem(-ox/2.,oy/2.,ox,oy,parent=smiley) \ for i in range(2)] yeux[0].setPos(-d/6,-d/8)
yeux[1].setPos(+d/6,-d/8) brush = QBrush(Qt.black) for oeil in yeux:
oeil.setBrush(brush) smiley.setPos(rectGris.mapToScene(rectGris.rect().center()))
smiley.setRotation(20) smiley.setScale(1.5) for item in scene.items():
item.setFlag(QGraphicsItem.ItemIsMovable)
item.setFlag(QGraphicsItem.ItemIsSelectable) if __name__ == '__main__': app =
QApplication(sys.argv) mainWindow = MainWindow() sys.exit(app.exec_())
Voici quelques explications (pour la création des éléments de la scène, se référer à la
Section 1, Tous en scène !).
217
