Sign Up

Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.

Have an account? Sign In

Have an account? Sign In Now

Sign In

Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.

Sign Up Here

Forgot Password?

Don't have account, Sign Up Here

Forgot Password

Lost your password? Please enter your email address. You will receive a link and will create a new password via email.

Have an account? Sign In Now

You must login to ask a question.

Forgot Password?

Need An Account, Sign Up Here

Please briefly explain why you feel this question should be reported.

Please briefly explain why you feel this answer should be reported.

Please briefly explain why you feel this user should be reported.

Sign InSign Up

The Archive Base

The Archive Base Logo The Archive Base Logo

The Archive Base Navigation

  • SEARCH
  • Home
  • About Us
  • Blog
  • Contact Us
Search
Ask A Question

Mobile menu

Close
Ask a Question
  • Home
  • Add group
  • Groups page
  • Feed
  • User Profile
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Buy Points
  • Users
  • Help
  • Buy Theme
  • SEARCH
Home/ Questions/Q 8953635
In Process

The Archive Base Latest Questions

Editorial Team
  • 0
Editorial Team
Asked: June 15, 20262026-06-15T14:08:32+00:00 2026-06-15T14:08:32+00:00

I’m fairly new to Python and Qt, but I’m trying to create a GUI

  • 0

I’m fairly new to Python and Qt, but I’m trying to create a GUI with some animated graphic elements. I can make a simple animation work; in the following code class MyView will work when called, but class GraphicsView is not animated!

Can anyone help me see the problem?

The problem is in the class GraphicsScene, I think:

import sys
from PyQt4 import QtGui, QtCore

class MyView(QtGui.QGraphicsView):
    def __init__(self):
        QtGui.QGraphicsView.__init__(self)

        self.scene = QtGui.QGraphicsScene(self)
        self.item = QtGui.QGraphicsEllipseItem(-20, -10, 40, 20)
        self.scene.addItem(self.item)
        self.setScene(self.scene)

        # Remember to hold the references to QTimeLine and QGraphicsItemAnimation instances.
        # They are not kept anywhere, even if you invoke QTimeLine.start().
        self.tl = QtCore.QTimeLine(1000)
        self.tl.setFrameRange(0, 100)
        self.a = QtGui.QGraphicsItemAnimation()
        self.a.setItem(self.item)
        self.a.setTimeLine(self.tl)

        # Each method determining an animation state (e.g. setPosAt, setRotationAt etc.)
        # takes as a first argument a step which is a value between 0 (the beginning of the
        # animation) and 1 (the end of the animation)
        self.a.setPosAt(0, QtCore.QPointF(0, -10))
        self.a.setRotationAt(1, 360)

        self.tl.start()

#create the graphicsView which contains the graphicsScene
class GraphicsView(QtGui.QGraphicsView):
    #initialize and set dragMode and renderHints for everything inside the view
    def __init__(self, parent=None):
        super(GraphicsView, self).__init__(parent)

        #the dragMode should be changed to use the rihgt-mousebutton
        self.setDragMode(QtGui.QGraphicsView.ScrollHandDrag)

        self.setRenderHint(QtGui.QPainter.Antialiasing)
        self.setRenderHint(QtGui.QPainter.TextAntialiasing)

    #crate a zoom function for the mouse-wheel
    def wheelEvent(self, event):
        factor = 1.5 ** (event.delta() / 240.0)
        self.scale(factor, factor)

#create the GraphicsScene containing the main graphics
class GraphicsScene(QtGui.QGraphicsScene):

    def animate(self):

        self.animations = range(3)

        #move item to position(x,y) at time t
        def animate_to(item,x,y,t):

            animation = QtGui.QGraphicsItemAnimation()
            #create a timeline of 1 second
            timeline = QtCore.QTimeLine(2000)
            #number of steps in timeline (100)
            timeline.setFrameRange(0,100)
            #set position at time t
            animation.setPosAt(t, QtCore.QPointF(x,y))
            #apply this to "item"
            animation.setItem(item)
            #add timeline to the animation
            animation.setTimeLine(timeline)

            #output of this definition is "animation"
            return animation

        self.animations[0] = animate_to(self.geos[0],200,200,0.2)
        self.animations[1] = animate_to(self.geos[1],200,200,0.2)
        self.animations[2] = animate_to(self.geos[2],200,200,0.2)

        #animation.timeline().start()
        self.animator.start(2000)


    def __init__(self, parent=None):
        QtGui.QGraphicsScene.__init__(self, parent)
        #set the size of the scene
        self.setSceneRect(0,0,2000,2000)

        #self.addRect(QtCore.QRectF(800,800,200,200))

        #---create the scene-geometries ---   

        #empty list to hold the geometries
        self.geos = []

        #create stuff to add to the scene
        geo_01 = QtGui.QGraphicsEllipseItem(800,800,200,200)
        geo_02 = QtGui.QGraphicsEllipseItem(850,850,300,300)
        geo_03 = QtGui.QGraphicsEllipseItem(900,900,400,400)
        #add stuff to the scene
        self.addItem(geo_01)
        self.addItem(geo_02)
        self.addItem(geo_03)

        #put stuff into list so it can be referenced
        self.geos.append(geo_01)
        self.geos.append(geo_02)
        self.geos.append(geo_03)

        #----do the animation thing---
        self.animator = QtCore.QTimer()

        self.animator.timeout.connect(self.animate)

        self.animate()


#Create a new class which inherrits from "QtGui.QMainWindow"
class Example(QtGui.QMainWindow):

    def __init__(self):
        #The "super()"-method returns the parrent object of the example-class
        #and it's constructor is called ("__init__")
        super(Example, self).__init__()

        self.initUI()

    #create the GUI
    def initUI(self):

        """---create the buttons---"""

        #set a font for the tool-tips
        QtGui.QToolTip.setFont(QtGui.QFont('SansSerif', 10))

        #create a button and a tool-tip for the button
        btn_01 = QtGui.QPushButton('Button', self)
        btn_01.setToolTip('This is a <b>QPushButton</b> widget')
        #resize the button with a recommended size (.sizeHint())
        btn_01.resize(btn_01.sizeHint())

        #create a button and a tool-tip for the button
        btn_02 = QtGui.QPushButton('Button', self)
        btn_02.setToolTip('This is a <b>QPushButton</b> widget')
        #resize the button with a recommended size (.sizeHint())
        btn_02.resize(btn_02.sizeHint())

        """----create a layout----"""

        #create the main widget, which holds the layout
        self.main_widget = QtGui.QWidget(self)

        #create a vertical box layout to hold the buttons on the right
        vbox = QtGui.QVBoxLayout()
        vbox.addStretch(1)
        vbox.addWidget(btn_01)
        vbox.addWidget(btn_02)  

        #create horizontal box layout to hold the vbox and the main area
        hbox = QtGui.QHBoxLayout()

        #store the GraphicsScene in a variable so it is not destroyed
        self.scene = GraphicsScene()
        #add the scene to the GraphicsView
        view = GraphicsView(self.scene)

        hbox.addWidget(view)
        hbox.addStretch(1)
        hbox.addLayout(vbox)

        self.main_widget.setLayout(hbox)
        self.setCentralWidget(self.main_widget)

        #set the possition and size of the window, then set the window title
        #these methods have been inherited by the "QtGui.QWidget"-class
        self.setGeometry(100, 100, 700, 500)
        self.setWindowTitle("PatternNexus...Maybe?")
        #self.setWindowIcon(QtGui.QIcon('web.png'))

        self.show()

    def closeEvent(self, event):
        #create a messagebox to confirm quit
        # when QtGui.QWidget is closed the QtGui.QCloseEvent is generated
        # to modify its behaviour the event handler (closeEvent()) must be reinplemented

        #create a msgBox with 2 buttons
        #4th argument is the button combination
        #5th argument is the button with initial ketboard focus
        reply = QtGui.QMessageBox.question(self, 'Message',
            "Are you leaving?", QtGui.QMessageBox.Yes | 
            QtGui.QMessageBox.No, QtGui.QMessageBox.No)

        #test the return value, is "yes" the event is accepted
        if reply == QtGui.QMessageBox.Yes:
            event.accept()
        else:
            event.ignore()

def main():
    #start the application
    app = QtGui.QApplication(sys.argv)
    ex = Example()
    sys.exit(app.exec_())

#if this module (.py-file) is run as the main program the statement is true
#if this module is imported the statement will return false
if __name__ == '__main__':
    main()

My main references for coding this are “Rapid GUI programming with python and QT – Chapter 12”, and these links: http://lateral.netmanagers.com.ar/stories/BBS53.html, and http://www.diotavelli.net/PyQtWiki/GraphicsView_-_SimpleAnimation

  • 1 1 Answer
  • 0 Views
  • 0 Followers
  • 0
Share
  • Facebook
  • Report

Leave an answer
Cancel reply

You must login to add an answer.

Forgot Password?

Need An Account, Sign Up Here

1 Answer

  • Voted
  • Oldest
  • Recent
  • Random
  1. Editorial Team
    Editorial Team
    2026-06-15T14:08:34+00:00Added an answer on June 15, 2026 at 2:08 pm

    so the answer to my question was: start the timelne by adding:
    [ animation.timeLine().start() for animation in self.animations ]
    in the animate definition

    • 0
    • Reply
    • Share
      Share
      • Share on Facebook
      • Share on Twitter
      • Share on LinkedIn
      • Share on WhatsApp
      • Report

Sidebar

Related Questions

I have just tried to save a simple *.rtf file with some websites and
Seemingly simple, but I cannot find anything relevant on the web. What is the
I'm trying to convert HTML to plain text. I get many &\#8217; &\#8220; etc.
I'm trying to create an if statement in PHP that prevents a single post
I have a string like this: La Torre Eiffel paragonata all&#8217;Everest What PHP function
link Im having trouble converting the html entites into html characters, (&# 8217;) i
I want to count how many characters a certain string has in PHP, but
For some reason, after submitting a string like this Jack’s Spindle from a text
I am trying to understand how to use SyndicationItem to display feed which is
I have a French site that I want to parse, but am running into

Explore

  • Home
  • Add group
  • Groups page
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Users
  • Help
  • SEARCH

Footer

© 2021 The Archive Base. All Rights Reserved
With Love by The Archive Base

Insert/edit link

Enter the destination URL

Or link to existing content

    No search term specified. Showing recent items. Search or use up and down arrow keys to select an item.