Advertisement
Guest User

Untitled

a guest
Apr 26th, 2012
108
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 3.28 KB | None | 0 0
  1. import sys
  2. from PySide.QtCore import *
  3. from PySide.QtGui import *
  4.  
  5. class TestFrame( QFrame ):
  6.     def __init__( self, parent=None ):
  7.         super( TestFrame, self ).__init__( parent )
  8.         self.setFrameStyle( QFrame.StyledPanel )
  9.         self.setSizePolicy( parent.sizePolicy() ) # THIS DOESN'T SEEM TO HAVE ANY EFFECT
  10.  
  11. class SliderWidget( QWidget ):
  12.     def __init__( self ):
  13.         super( SliderWidget, self ).__init__()
  14.         self.buildUI()
  15.        
  16.     def buildUI( self ):
  17.         self.setLayout( QGridLayout() )
  18.  
  19.         # ANIMATION GROUP FOR TOP AND BOTTOM FRAMES
  20.         self.animGroup = QParallelAnimationGroup()
  21.        
  22.         # CREATE WIDGETS
  23.         self.frameCentre = TestFrame( self )
  24.         self.frameTop = TestFrame( self.frameCentre )
  25.         self.frameBottom = TestFrame( self.frameCentre )
  26.         self.btn = QPushButton( 'GO' )
  27.  
  28.         # TOOLTIPS
  29.         self.frameTop.setToolTip( 'frame top' )
  30.         self.frameCentre.setToolTip( 'frame centre' )
  31.         self.frameBottom.setToolTip( 'frame bottom' )
  32.  
  33.         # SLIDE IN TOP AND BOTTOM FRAMES
  34.         self.btn.clicked.connect( self.moveWidgets )
  35.        
  36.         # RESIZE AND REPO TOP AND BOTTOM FRAMES
  37.         # THIS IS WHERE I HAVE TROUBLE TO SET THE RIGHT SIZE AND POSITION
  38.         # I'VE SET ABSOLUTE POSITION AND SCALE JUST TO ILLUSTRATE WHAT I'M AFTER.
  39.         # THIS REALLY NEEDS TO BE LINKED TO THE PARENT SO THE TOP AND BOTOM FRAMES ARE ALWAYS THE SAME WIDTH
  40.         # AND HAVE THE SAME SIZE POLICY AS THE MIDDLE FRAME
  41.         self.frameTop.setGeometry( 0, 0, 800, 100 )
  42.         self.frameBottom.setGeometry( 0, 600, 800, 100 )
  43.  
  44.         # HIDE TOP AND BOTTOM AT FIRST - DEACTIVATE FOR DEBUGGING
  45.         #self.frameTop.hide()
  46.         #self.frameBottom.hide()
  47.        
  48.         # ADD CENTRETO LAYOUT
  49.         self.layout().addWidget( self.frameCentre )
  50.         self.layout().addWidget( self.btn )
  51.  
  52.  
  53.     def moveWidgets( self ):
  54.         '''trigger animations'''
  55.         self.slideInWidget( self.frameTop, 'topDown' )
  56.         self.slideInWidget( self.frameBottom, 'bottomUp')
  57.         self.animGroup.start()
  58.  
  59.     def slideInWidget( self, widget, direction ):
  60.         '''assign animation to frames'''
  61.         assert direction in ( 'topDown', 'bottomUp' )
  62.         # DEFINE START AND END POSITION - THIS IS WHERE I HAVE TROUBLE SETTING THE RIGHT POSITION
  63.         if direction == 'topDown':
  64.             start = -1000
  65.             end = 0
  66.         elif direction == 'bottomUp':
  67.             start = 900
  68.             end = 600
  69.  
  70.         # START ANIMATION
  71.         widget.show()
  72.         slideInAnim = self.slideAnimation( widget, start, end )
  73.         self.animGroup.addAnimation( slideInAnim )
  74.  
  75.     def slideAnimation( self, widget, start, end ):
  76.         '''Define sliding animation'''
  77.         slideAnimation = QPropertyAnimation( widget, 'pos' )
  78.         slideAnimation.setDuration( 1000 )
  79.         slideAnimation.setStartValue( QPoint( widget.pos().x(), start ) )
  80.         slideAnimation.setEndValue( QPoint( widget.pos().x(), end ) )
  81.         slideAnimation.setEasingCurve( QEasingCurve.OutCubic )
  82.         return slideAnimation
  83.  
  84. if __name__ == "__main__":
  85.  
  86.     app = QApplication(sys.argv)  
  87.     sw = SliderWidget()
  88.    
  89.     sw.resize( 800, 750 )
  90.     sw.show()
  91.    
  92.     sys.exit(app.exec_())
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement