def test_setParentItem(self): global qgraphics_item_painted scene = QGraphicsScene() scene.addText("test") view = QGraphicsView(scene) rect = self.createRoundRect(scene) view.show() QTimer.singleShot(1000, self.quit_app) self.app.exec_() self.assert_(qgraphics_item_painted)
class AddItem(UsesQApplication): '''Tests for QGraphicsScene.add*''' qapplication = True def setUp(self): #Acquire resources super(AddItem, self).setUp() self.scene = QGraphicsScene() # While the scene does not inherits from QWidget, requires # an application to make the internals work. def tearDown(self): #Release resources del self.scene super(AddItem, self).tearDown() def testEllipse(self): #QGraphicsScene.addEllipse item = self.scene.addEllipse(100, 100, 100, 100) self.assertTrue(isinstance(item, QGraphicsEllipseItem)) def testLine(self): #QGraphicsScene.addLine item = self.scene.addLine(100, 100, 200, 200) self.assertTrue(isinstance(item, QGraphicsLineItem)) def testPath(self): #QGraphicsScene.addPath item = self.scene.addPath(QPainterPath()) self.assertTrue(isinstance(item, QGraphicsPathItem)) def testPixmap(self): #QGraphicsScene.addPixmap item = self.scene.addPixmap(QPixmap()) self.assertTrue(isinstance(item, QGraphicsPixmapItem)) def testPolygon(self): #QGraphicsScene.addPolygon points = [QPointF(0, 0), QPointF(100, 100), QPointF(0, 100)] item = self.scene.addPolygon(QPolygonF(points)) self.assertTrue(isinstance(item, QGraphicsPolygonItem)) def testRect(self): #QGraphicsScene.addRect item = self.scene.addRect(100, 100, 100, 100) self.assertTrue(isinstance(item, QGraphicsRectItem)) def testSimpleText(self): #QGraphicsScene.addSimpleText item = self.scene.addSimpleText('Monty Python 42') self.assertTrue(isinstance(item, QGraphicsSimpleTextItem)) def testText(self): #QGraphicsScene.addText item = self.scene.addText('Monty Python 42') self.assertTrue(isinstance(item, QGraphicsTextItem)) def testWidget(self): #QGraphicsScene.addWidget # XXX: printing some X11 error when using under PyQt4 item = self.scene.addWidget(QPushButton()) self.assertTrue(isinstance(item, QGraphicsProxyWidget))
scene = QGraphicsScene() media = Phonon.MediaObject() video = Phonon.VideoWidget() Phonon.createPath(media, video) proxy = CustomProxy() proxy.setWidget(video) rect = proxy.boundingRect() #proxy.setPos(0, 0) #proxy.show() scene.addItem(proxy) media.setCurrentSource("/home/amit/Videos/Kung Fu Panda 3 (2015) 1080p R6 [DayT.se].mp4") media.play() titem = scene.addText("Bla-bla-bla") titem.setPos(130, 130) #titem.setPos(rect.width()/2, rect.height()/2) view = QGraphicsView(scene) vp = QGLWidget() view.setViewport(vp) #view.setRenderHints(QPainter.Antialiasing | QPainter.SmoothPixmapTransform) view.setViewportUpdateMode(QGraphicsView.BoundingRectViewportUpdate) view.setWindowTitle("Eternal fire") view.show() sys.exit(app.exec_())
class AddItem(UsesQApplication): """Tests for QGraphicsScene.add*""" qapplication = True def setUp(self): # Acquire resources super(AddItem, self).setUp() self.scene = QGraphicsScene() # While the scene does not inherits from QWidget, requires # an application to make the internals work. def tearDown(self): # Release resources del self.scene super(AddItem, self).tearDown() def testEllipse(self): # QGraphicsScene.addEllipse item = self.scene.addEllipse(100, 100, 100, 100) self.assertTrue(isinstance(item, QGraphicsEllipseItem)) def testLine(self): # QGraphicsScene.addLine item = self.scene.addLine(100, 100, 200, 200) self.assertTrue(isinstance(item, QGraphicsLineItem)) def testPath(self): # QGraphicsScene.addPath item = self.scene.addPath(QPainterPath()) self.assertTrue(isinstance(item, QGraphicsPathItem)) def testPixmap(self): # QGraphicsScene.addPixmap item = self.scene.addPixmap(QPixmap()) self.assertTrue(isinstance(item, QGraphicsPixmapItem)) def testPolygon(self): # QGraphicsScene.addPolygon points = [QPointF(0, 0), QPointF(100, 100), QPointF(0, 100)] item = self.scene.addPolygon(QPolygonF(points)) self.assertTrue(isinstance(item, QGraphicsPolygonItem)) def testRect(self): # QGraphicsScene.addRect item = self.scene.addRect(100, 100, 100, 100) self.assertTrue(isinstance(item, QGraphicsRectItem)) def testSimpleText(self): # QGraphicsScene.addSimpleText item = self.scene.addSimpleText("Monty Python 42") self.assertTrue(isinstance(item, QGraphicsSimpleTextItem)) def testText(self): # QGraphicsScene.addText item = self.scene.addText("Monty Python 42") self.assertTrue(isinstance(item, QGraphicsTextItem)) def testWidget(self): # QGraphicsScene.addWidget # XXX: printing some X11 error when using under PyQt4 item = self.scene.addWidget(QPushButton()) self.assertTrue(isinstance(item, QGraphicsProxyWidget))
class WorldViewer(QWidget): def __init__(self, charname='', currentzone='', parent=None): super(WorldViewer, self).__init__(parent) self.setWindowTitle("World Viewer") if not DEBUG: self.setWindowState(Qt.WindowMaximized) self.move(0,0) self.grabKeyboard() self.keyspressed = set() self.currentzone = currentzone self.charname = charname self.scene = QGraphicsScene() self.view = QGraphicsView(self.scene) self.view.scale(5, 5) self.view.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff) self.view.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOff) # pb = QPushButton("Push!") # stylesheet = ''' # QPushButton { # border: 2px solid #8f8f91; # border-radius: 6px; # background-color: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, # stop: 0 #f6f7fa, stop: 1 #dadbde); # min-width: 80px; # } # # QPushButton:pressed { # background-color: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, # stop: 0 #dadbde, stop: 1 #f6f7fa); # } # # QPushButton:flat { # border: none; /* no border for a flat push button */ # } # QPushButton:default { # border-color: navy; /* make the default button prominent */ # } # ''' # pb.setStyleSheet(stylesheet) # self.scene.addWidget(pb) layout = QVBoxLayout() for w in (self.view, ): layout.addWidget(w) self.setLayout(layout) self.loading = self.scene.addText("Loading...") self.loading.setHtml("<h1>Loading...</h1>") self.last_update = datetime.datetime.now() self.world_objects = {} self.world_object_widgets = {} self._update_objects(client.get_all_objects(self.currentzone)) print self.world_objects # Set character status to online. client.set_status(self.currentzone, self.charname) self.loading.hide() # Set a repeating callback on a timer to get object updates self.obj_update_timer = QTimer(self) self.connect(self.obj_update_timer, SIGNAL("timeout()"), self.update_objects) self.obj_update_timer.start(CLIENT_UPDATE_FREQ) # Set a repeating callback on a timer to send movement packets. self.movement_timer = QTimer(self) self.connect(self.movement_timer, SIGNAL("timeout()"), self.send_movement) self.movement_timer.start(CLIENT_UPDATE_FREQ) def sizeHint(self): desktop = QApplication.instance().desktop() geom = desktop.availableGeometry() return QSize(geom.width()/2, geom.height()/2) def keyPressEvent(self, event): '''Qt's key handling is wierd. If a key gets "stuck", just press and release it again.''' # Ignore autorepeat events. if event.isAutoRepeat(): event.ignore() return # Add all other events to our set of pressed keys. self.keyspressed.add(event.key()) event.accept() def keyReleaseEvent(self, event): # Ignore autorepeat events. if event.isAutoRepeat(): event.ignore() return # Remove all other events from our set of pressed keys. self.keyspressed.discard(event.key()) event.accept() def send_movement(self): '''Send movement calls to the zone/movement server.''' x = 0 y = 0 def _in_set(x, *args): for a in args: if int(a) in x: return True return False if _in_set(self.keyspressed, Qt.Key_Left, Qt.Key_A): x -= 1 if _in_set(self.keyspressed, Qt.Key_Right, Qt.Key_D): x += 1 if _in_set(self.keyspressed, Qt.Key_Up, Qt.Key_W): y -= 1 if _in_set(self.keyspressed, Qt.Key_Down, Qt.Key_S): y += 1 client.send_movement(self.currentzone, self.charname, x, y, 0) def _update_objects(self, objectslist): if len(objectslist) != 0: print "Updated %d objects." % len(objectslist) for obj in objectslist: # Filter out any hidden objects if "hidden" in obj.get('states'): continue obj_id = obj['_id']['$oid'] self.world_objects.update({obj_id: obj}) if obj_id not in self.world_object_widgets: # Create a new widget, add it to the view and to world_object_widgets objwidget = WorldObject(obj) self.world_object_widgets.update({obj_id: objwidget}) self.scene.addItem(objwidget) else: objwidget = self.world_object_widgets[obj_id] objwidget.setOffset(obj['loc']['x'], obj['loc']['y']) # Update our view if the name is the same as our character. if obj['name'] == self.charname: self.view.centerOn(objwidget) self.view.ensureVisible(objwidget) def update_objects(self): '''Gets an upated list of objects from the zone and stores them locally.''' new_objects = client.get_objects_since(self.last_update, self.currentzone) self._update_objects(new_objects) self.last_update = datetime.datetime.now()
class WorldViewer(QWidget): def __init__(self, charname='', currentzone='', parent=None): super(WorldViewer, self).__init__(parent) self.setWindowTitle("World Viewer") if not DEBUG: self.setWindowState(Qt.WindowMaximized) self.move(0, 0) self.grabKeyboard() self.keyspressed = set() self.currentzone = currentzone self.charname = charname self.scene = QGraphicsScene() self.view = QGraphicsView(self.scene) self.view.scale(5, 5) self.view.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff) self.view.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOff) # pb = QPushButton("Push!") # stylesheet = ''' # QPushButton { # border: 2px solid #8f8f91; # border-radius: 6px; # background-color: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, # stop: 0 #f6f7fa, stop: 1 #dadbde); # min-width: 80px; # } # # QPushButton:pressed { # background-color: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, # stop: 0 #dadbde, stop: 1 #f6f7fa); # } # # QPushButton:flat { # border: none; /* no border for a flat push button */ # } # QPushButton:default { # border-color: navy; /* make the default button prominent */ # } # ''' # pb.setStyleSheet(stylesheet) # self.scene.addWidget(pb) layout = QVBoxLayout() for w in (self.view, ): layout.addWidget(w) self.setLayout(layout) self.loading = self.scene.addText("Loading...") self.loading.setHtml("<h1>Loading...</h1>") self.last_update = datetime.datetime.now() self.world_objects = {} self.world_object_widgets = {} self._update_objects(client.get_all_objects(self.currentzone)) print self.world_objects # Set character status to online. client.set_status(self.currentzone, self.charname) self.loading.hide() # Set a repeating callback on a timer to get object updates self.obj_update_timer = QTimer(self) self.connect(self.obj_update_timer, SIGNAL("timeout()"), self.update_objects) self.obj_update_timer.start(CLIENT_UPDATE_FREQ) # Set a repeating callback on a timer to send movement packets. self.movement_timer = QTimer(self) self.connect(self.movement_timer, SIGNAL("timeout()"), self.send_movement) self.movement_timer.start(CLIENT_UPDATE_FREQ) def sizeHint(self): desktop = QApplication.instance().desktop() geom = desktop.availableGeometry() return QSize(geom.width() / 2, geom.height() / 2) def keyPressEvent(self, event): '''Qt's key handling is wierd. If a key gets "stuck", just press and release it again.''' # Ignore autorepeat events. if event.isAutoRepeat(): event.ignore() return # Add all other events to our set of pressed keys. self.keyspressed.add(event.key()) event.accept() def keyReleaseEvent(self, event): # Ignore autorepeat events. if event.isAutoRepeat(): event.ignore() return # Remove all other events from our set of pressed keys. self.keyspressed.discard(event.key()) event.accept() def send_movement(self): '''Send movement calls to the zone/movement server.''' x = 0 y = 0 def _in_set(x, *args): for a in args: if int(a) in x: return True return False if _in_set(self.keyspressed, Qt.Key_Left, Qt.Key_A): x -= 1 if _in_set(self.keyspressed, Qt.Key_Right, Qt.Key_D): x += 1 if _in_set(self.keyspressed, Qt.Key_Up, Qt.Key_W): y -= 1 if _in_set(self.keyspressed, Qt.Key_Down, Qt.Key_S): y += 1 client.send_movement(self.currentzone, self.charname, x, y, 0) def _update_objects(self, objectslist): if len(objectslist) != 0: print "Updated %d objects." % len(objectslist) for obj in objectslist: # Filter out any hidden objects if "hidden" in obj.get('states'): continue obj_id = obj['_id']['$oid'] self.world_objects.update({obj_id: obj}) if obj_id not in self.world_object_widgets: # Create a new widget, add it to the view and to world_object_widgets objwidget = WorldObject(obj) self.world_object_widgets.update({obj_id: objwidget}) self.scene.addItem(objwidget) else: objwidget = self.world_object_widgets[obj_id] objwidget.setOffset(obj['loc']['x'], obj['loc']['y']) # Update our view if the name is the same as our character. if obj['name'] == self.charname: self.view.centerOn(objwidget) self.view.ensureVisible(objwidget) def update_objects(self): '''Gets an upated list of objects from the zone and stores them locally.''' new_objects = client.get_objects_since(self.last_update, self.currentzone) self._update_objects(new_objects) self.last_update = datetime.datetime.now()