#!/usr/bin/env python
# TQt tutorial 10.
import sys
from python_tqt . qt import *
class LCDRange ( TQVBox ) :
def __init__ ( self , parent = None , name = None ) :
TQVBox . __init__ ( self , parent , name )
lcd = TQLCDNumber ( 2 , self , ' lcd ' )
self . slider = TQSlider ( TQt . Horizontal , self , ' slider ' )
self . slider . setRange ( 0 , 99 )
self . slider . setValue ( 0 )
self . connect ( self . slider , SIGNAL ( ' valueChanged(int) ' ) , lcd , SLOT ( ' display(int) ' ) )
self . connect ( self . slider , SIGNAL ( ' valueChanged(int) ' ) , self , PYSIGNAL ( ' valueChanged(int) ' ) )
self . setFocusProxy ( self . slider )
def value ( self ) :
return self . slider . value ( )
def setValue ( self , value ) :
self . slider . setValue ( value )
def setRange ( self , minVal , maxVal ) :
if minVal < 0 or maxVal > 99 or minVal > maxVal :
raise ValueError , ' LCDRange.setRange(): invalid range '
self . slider . setRange ( minVal , maxVal )
class CannonField ( TQWidget ) :
def __init__ ( self , parent = None , name = None ) :
TQWidget . __init__ ( self , parent , name )
self . ang = 45
self . f = 0
self . setPalette ( TQPalette ( TQColor ( 250 , 250 , 200 ) ) )
def angle ( self ) :
return self . ang
def setAngle ( self , degrees ) :
if degrees < 5 :
degrees = 5
if degrees > 70 :
degrees = 70
if self . ang == degrees :
return
self . ang = degrees
self . repaint ( self . cannonRect ( ) , 0 )
self . emit ( PYSIGNAL ( ' angleChanged(int) ' ) , ( self . ang , ) )
def force ( self ) :
return self . f
def setForce ( self , newton ) :
if newton < 0 :
newton = 0
if self . f == newton :
return
self . f = newton
self . emit ( PYSIGNAL ( ' forceChanged(int) ' ) , ( self . f , ) )
def paintEvent ( self , ev ) :
if not ev . rect ( ) . intersects ( self . cannonRect ( ) ) :
return
cr = self . cannonRect ( )
pix = TQPixmap ( cr . size ( ) )
pix . fill ( self , cr . topLeft ( ) )
p = TQPainter ( pix )
p . setBrush ( TQt . blue )
p . setPen ( TQt . NoPen )
p . translate ( 0 , pix . height ( ) - 1 )
p . drawPie ( TQRect ( - 35 , - 35 , 70 , 70 ) , 0 , 90 * 16 )
p . rotate ( - self . ang )
p . drawRect ( TQRect ( 33 , - 4 , 15 , 8 ) )
p . end ( )
p . begin ( self )
p . drawPixmap ( cr . topLeft ( ) , pix )
def cannonRect ( self ) :
r = TQRect ( 0 , 0 , 50 , 50 )
r . moveBottomLeft ( self . rect ( ) . bottomLeft ( ) )
return r
def sizePolicy ( self ) :
return TQSizePolicy ( TQSizePolicy . Expanding , TQSizePolicy . Expanding )
class MyWidget ( TQWidget ) :
def __init__ ( self , parent = None , name = None ) :
TQWidget . __init__ ( self , parent , name )
quit = TQPushButton ( ' &Quit ' , self , ' quit ' )
quit . setFont ( TQFont ( ' Times ' , 18 , TQFont . Bold ) )
self . connect ( quit , SIGNAL ( ' clicked() ' ) , tqApp , SLOT ( ' quit() ' ) )
self . angle = LCDRange ( self , ' angle ' )
self . angle . setRange ( 5 , 70 )
self . force = LCDRange ( self , ' force ' )
self . force . setRange ( 10 , 50 )
self . cannonField = CannonField ( self , ' cannonField ' )
self . connect ( self . angle , PYSIGNAL ( ' valueChanged(int) ' ) , self . cannonField . setAngle )
self . connect ( self . cannonField , PYSIGNAL ( ' angleChanged(int) ' ) , self . angle . setValue )
self . connect ( self . force , PYSIGNAL ( ' valueChanged(int) ' ) , self . cannonField . setForce )
self . connect ( self . cannonField , PYSIGNAL ( ' forceChanged(int) ' ) , self . force . setValue )
grid = TQGridLayout ( self , 2 , 2 , 10 )
grid . addWidget ( quit , 0 , 0 )
grid . addWidget ( self . cannonField , 1 , 1 )
grid . setColStretch ( 1 , 10 )
leftBox = TQVBoxLayout ( )
grid . addLayout ( leftBox , 1 , 0 )
leftBox . addWidget ( self . angle )
leftBox . addWidget ( self . force )
self . angle . setValue ( 60 )
self . force . setValue ( 25 )
self . angle . setFocus ( )
TQApplication . setColorSpec ( TQApplication . CustomColor )
a = TQApplication ( sys . argv )
w = MyWidget ( )
w . setGeometry ( 100 , 100 , 500 , 355 )
a . setMainWidget ( w )
w . show ( )
a . exec_loop ( )