Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import sys
- from PySide.QtCore import *
- from PySide.QtGui import *
- class TestFrame( QFrame ):
- def __init__( self, parent=None ):
- super( TestFrame, self ).__init__( parent )
- self.setFrameStyle( QFrame.StyledPanel )
- self.setSizePolicy( parent.sizePolicy() ) # THIS DOESN'T SEEM TO HAVE ANY EFFECT
- class SliderWidget( QWidget ):
- def __init__( self ):
- super( SliderWidget, self ).__init__()
- self.buildUI()
- def buildUI( self ):
- self.setLayout( QGridLayout() )
- # ANIMATION GROUP FOR TOP AND BOTTOM FRAMES
- self.animGroup = QParallelAnimationGroup()
- # CREATE WIDGETS
- self.frameCentre = TestFrame( self )
- self.frameTop = TestFrame( self.frameCentre )
- self.frameBottom = TestFrame( self.frameCentre )
- self.btn = QPushButton( 'GO' )
- # TOOLTIPS
- self.frameTop.setToolTip( 'frame top' )
- self.frameCentre.setToolTip( 'frame centre' )
- self.frameBottom.setToolTip( 'frame bottom' )
- # SLIDE IN TOP AND BOTTOM FRAMES
- self.btn.clicked.connect( self.moveWidgets )
- # RESIZE AND REPO TOP AND BOTTOM FRAMES
- # THIS IS WHERE I HAVE TROUBLE TO SET THE RIGHT SIZE AND POSITION
- # I'VE SET ABSOLUTE POSITION AND SCALE JUST TO ILLUSTRATE WHAT I'M AFTER.
- # THIS REALLY NEEDS TO BE LINKED TO THE PARENT SO THE TOP AND BOTOM FRAMES ARE ALWAYS THE SAME WIDTH
- # AND HAVE THE SAME SIZE POLICY AS THE MIDDLE FRAME
- self.frameTop.setGeometry( 0, 0, 800, 100 )
- self.frameBottom.setGeometry( 0, 600, 800, 100 )
- # HIDE TOP AND BOTTOM AT FIRST - DEACTIVATE FOR DEBUGGING
- #self.frameTop.hide()
- #self.frameBottom.hide()
- # ADD CENTRETO LAYOUT
- self.layout().addWidget( self.frameCentre )
- self.layout().addWidget( self.btn )
- def moveWidgets( self ):
- '''trigger animations'''
- self.slideInWidget( self.frameTop, 'topDown' )
- self.slideInWidget( self.frameBottom, 'bottomUp')
- self.animGroup.start()
- def slideInWidget( self, widget, direction ):
- '''assign animation to frames'''
- assert direction in ( 'topDown', 'bottomUp' )
- # DEFINE START AND END POSITION - THIS IS WHERE I HAVE TROUBLE SETTING THE RIGHT POSITION
- if direction == 'topDown':
- start = -1000
- end = 0
- elif direction == 'bottomUp':
- start = 900
- end = 600
- # START ANIMATION
- widget.show()
- slideInAnim = self.slideAnimation( widget, start, end )
- self.animGroup.addAnimation( slideInAnim )
- def slideAnimation( self, widget, start, end ):
- '''Define sliding animation'''
- slideAnimation = QPropertyAnimation( widget, 'pos' )
- slideAnimation.setDuration( 1000 )
- slideAnimation.setStartValue( QPoint( widget.pos().x(), start ) )
- slideAnimation.setEndValue( QPoint( widget.pos().x(), end ) )
- slideAnimation.setEasingCurve( QEasingCurve.OutCubic )
- return slideAnimation
- if __name__ == "__main__":
- app = QApplication(sys.argv)
- sw = SliderWidget()
- sw.resize( 800, 750 )
- sw.show()
- sys.exit(app.exec_())
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement