Advertisement
Guest User

Untitled

a guest
Apr 27th, 2012
158
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. import sys
  2. from PySide.QtCore import *
  3. from PySide.QtGui import *
  4.  
  5. class TestFrame( QFrame ):
  6.     def __init__( self, area, parent=None ):
  7.         super( TestFrame, self ).__init__( parent )
  8.         self.setFrameStyle( QFrame.StyledPanel )
  9.         self.area = area
  10.         self.frame_height = self.height()
  11.        
  12.     def setHeight(self, height):
  13.         self.frame_height = height
  14.        
  15.     def resetGeometry(self, size):
  16.         height = self.frame_height
  17.        
  18.         x = 0
  19.         width = size.width()
  20.        
  21.         if self.area == Qt.TopDockWidgetArea:
  22.             y = 0
  23.            
  24.         elif self.area == Qt.BottomDockWidgetArea:
  25.             y = size.height() - height
  26.            
  27.         super(TestFrame, self).setGeometry(x, y, width, height)
  28.        
  29. class CentralFrame(QFrame):
  30.    
  31.     resized = Signal(QSize)
  32.    
  33.     def resizeEvent(self, event):
  34.         assert isinstance(event, QResizeEvent)
  35.        
  36.         self.resized.emit(event.size())
  37.  
  38. class SliderWidget(QMainWindow):
  39.     def __init__( self ):
  40.         super( SliderWidget, self ).__init__()
  41.         self.buildUI()
  42.        
  43.     def buildUI( self ):
  44.         self.setLayout( QGridLayout() )
  45.  
  46.         # ANIMATION GROUP FOR TOP AND BOTTOM FRAMES
  47.         self.animGroup = QParallelAnimationGroup()
  48.        
  49.         # CREATE WIDGETS
  50.         self.frameCentre = CentralFrame( self )
  51.         self.frameTop = TestFrame( Qt.TopDockWidgetArea, self.frameCentre )
  52.         self.frameBottom = TestFrame( Qt.BottomDockWidgetArea, self.frameCentre )
  53.         self.frameCentre.resized.connect(self.frameTop.resetGeometry)
  54.         self.frameCentre.resized.connect(self.frameBottom.resetGeometry)
  55.         self.btn = QPushButton( 'GO' )
  56.        
  57.         self.frameTop.setHeight(200)
  58.         self.frameBottom.setHeight(200)
  59.         self.frameCentre.setMinimumHeight(500)
  60.  
  61.         # TOOLTIPS
  62.         self.frameTop.setToolTip( 'frame top' )
  63.         self.frameCentre.setToolTip( 'frame centre' )
  64.         self.frameBottom.setToolTip( 'frame bottom' )
  65.  
  66.         # SLIDE IN TOP AND BOTTOM FRAMES
  67.         self.btn.clicked.connect( self.moveWidgets )
  68.  
  69.         # HIDE TOP AND BOTTOM AT FIRST - DEACTIVATE FOR DEBUGGING
  70.         self.frameTop.hide()
  71.         self.frameBottom.hide()
  72.        
  73.         # ADD CENTRETO LAYOUT
  74.         self.setCentralWidget(self.frameCentre)
  75.         layout = QVBoxLayout(self.frameCentre)
  76.         layout.addWidget(self.btn)
  77.         self.frameCentre.setLayout(layout)
  78.  
  79.  
  80.     def moveWidgets( self ):
  81.         '''trigger animations'''
  82.         self.animGroup.clear()
  83.         self.slideInWidget( self.frameTop, 'topDown' )
  84.         self.slideInWidget( self.frameBottom, 'bottomUp')
  85.         self.animGroup.start()
  86.  
  87.     def slideInWidget( self, widget, direction ):
  88.         '''assign animation to frames'''
  89.         assert direction in ( 'topDown', 'bottomUp' )
  90.         # DEFINE START AND END POSITION - THIS IS WHERE I HAVE TROUBLE SETTING THE RIGHT POSITION
  91.         if direction == 'topDown':
  92.             start = widget.height() * -1
  93.             end = 0
  94.         elif direction == 'bottomUp':
  95.             start = self.centralWidget().height()
  96.             end = self.centralWidget().height() - widget.height()
  97.  
  98.         # START ANIMATION
  99.         widget.show()
  100.         slideInAnim = self.slideAnimation( widget, start, end )
  101.         self.animGroup.addAnimation( slideInAnim )
  102.  
  103.     def slideAnimation( self, widget, start, end ):
  104.         '''Define sliding animation'''
  105.         slideAnimation = QPropertyAnimation( widget, 'pos' )
  106.         slideAnimation.setDuration( 1000 )
  107.         slideAnimation.setStartValue( QPoint( widget.pos().x(), start ) )
  108.         slideAnimation.setEndValue( QPoint( widget.pos().x(), end ) )
  109.         slideAnimation.setEasingCurve( QEasingCurve.OutCubic )
  110.         return slideAnimation
  111.  
  112. if __name__ == "__main__":
  113.  
  114.     app = QApplication(sys.argv)  
  115.     sw = SliderWidget()
  116.    
  117.     sw.resize( 800, 750 )
  118.     sw.show()
  119.    
  120.     sys.exit(app.exec_())
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement