Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. Language Bindings
  4. PySide2: Understanding QGraphicsItemGroup.setScale()
QtWS25 Last Chance

PySide2: Understanding QGraphicsItemGroup.setScale()

Scheduled Pinned Locked Moved Unsolved Language Bindings
pyside2qgraphicsscenescale
4 Posts 2 Posters 882 Views
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • galou_breizhG Offline
    galou_breizhG Offline
    galou_breizh
    wrote on last edited by galou_breizh
    #1

    Here is a little example that doesn't do what I expect it to do. I expect a 50x50 px² circle at (500, 1000) px. What I get is a single pixel.

    #!/usr/bin/python3
    # -*- coding: utf-8 -*-
    """Show an incomprehension in setScale for QGraphicsItemGroup."""
    
    from PySide2 import QtCore
    from PySide2 import QtGui
    from PySide2 import QtWidgets
    
    point_size = 0.1  # In real-world units.
    
    # Get entrypoint through which we control underlying Qt framework
    app = QtWidgets.QApplication([])
    
    scene = QtWidgets.QGraphicsScene()
    group = QtWidgets.QGraphicsItemGroup()
    scale = 500  # 1 real-world units = 500 px.  !! Has no apparent effect.
    group.setScale(scale)
    pen = QtGui.QPen(QtCore.Qt.red)
    brush = QtGui.QBrush(QtCore.Qt.blue)
    x = 1  # Real-world units.
    y = 2  # Real-world units.
    top_left = (x - point_size / 2, y - point_size / 2)
    ellipse = QtWidgets.QGraphicsEllipseItem(
        QtCore.QRectF(*top_left, point_size, point_size))
    ellipse.setPen(pen)
    ellipse.setBrush(brush)
    group.addToGroup(ellipse)
    scene.addItem(group)
    
    view = QtWidgets.QGraphicsView(scene)
    view.show()
    
    # Start Qt/PySide2 application. If we don't show any windows, the
    # app would just loop at this point without the means to exit
    app.exec_()
    
    Gojir4G 1 Reply Last reply
    0
    • galou_breizhG galou_breizh

      Here is a little example that doesn't do what I expect it to do. I expect a 50x50 px² circle at (500, 1000) px. What I get is a single pixel.

      #!/usr/bin/python3
      # -*- coding: utf-8 -*-
      """Show an incomprehension in setScale for QGraphicsItemGroup."""
      
      from PySide2 import QtCore
      from PySide2 import QtGui
      from PySide2 import QtWidgets
      
      point_size = 0.1  # In real-world units.
      
      # Get entrypoint through which we control underlying Qt framework
      app = QtWidgets.QApplication([])
      
      scene = QtWidgets.QGraphicsScene()
      group = QtWidgets.QGraphicsItemGroup()
      scale = 500  # 1 real-world units = 500 px.  !! Has no apparent effect.
      group.setScale(scale)
      pen = QtGui.QPen(QtCore.Qt.red)
      brush = QtGui.QBrush(QtCore.Qt.blue)
      x = 1  # Real-world units.
      y = 2  # Real-world units.
      top_left = (x - point_size / 2, y - point_size / 2)
      ellipse = QtWidgets.QGraphicsEllipseItem(
          QtCore.QRectF(*top_left, point_size, point_size))
      ellipse.setPen(pen)
      ellipse.setBrush(brush)
      group.addToGroup(ellipse)
      scene.addItem(group)
      
      view = QtWidgets.QGraphicsView(scene)
      view.show()
      
      # Start Qt/PySide2 application. If we don't show any windows, the
      # app would just loop at this point without the means to exit
      app.exec_()
      
      Gojir4G Offline
      Gojir4G Offline
      Gojir4
      wrote on last edited by Gojir4
      #2

      Hi @galou_breizh ,

      It seems it works (windows) after moving group.setScale(scale) below group.addToGroup(ellipse)

      group.addToGroup(ellipse)
      group.setScale(scale)
      

      Edit: It works also by putting the scale on the ellipse object. ellipse.setScale(scale)

      1 Reply Last reply
      0
      • galou_breizhG Offline
        galou_breizhG Offline
        galou_breizh
        wrote on last edited by
        #3

        Thanks for the super-quick answer!

        Ok, I don't get it but the result is now different. However, it's still not the correct result. What I get is something between a circle and a square with red stroke (size 500x500 px²) filled with white color with a 50x50 px² blue circle in the middle cf. screenshot. The same as in my other post: https://forum.qt.io/topic/110762/pyside2-filling-not-scaled#

        Gojir4G 1 Reply Last reply
        0
        • galou_breizhG galou_breizh

          Thanks for the super-quick answer!

          Ok, I don't get it but the result is now different. However, it's still not the correct result. What I get is something between a circle and a square with red stroke (size 500x500 px²) filled with white color with a 50x50 px² blue circle in the middle cf. screenshot. The same as in my other post: https://forum.qt.io/topic/110762/pyside2-filling-not-scaled#

          Gojir4G Offline
          Gojir4G Offline
          Gojir4
          wrote on last edited by
          #4

          @galou_breizh I answered in the other post. But it's not a good way to duplicate post for the same issue. Please try to avoid it in the future, thanks

          1 Reply Last reply
          1

          • Login

          • Login or register to search.
          • First post
            Last post
          0
          • Categories
          • Recent
          • Tags
          • Popular
          • Users
          • Groups
          • Search
          • Get Qt Extensions
          • Unsolved