[wxPython-users] Creating new cursors

Christopher Barker Chris.Barker at noaa.gov
Fri Aug 11 14:11:56 PDT 2006


1) you've hard coded the path to the cursors to your setup.

2) Once I fixed that, It runs, but doesn't appear to do much. I get a 
bar, and a text box on wither side, but that's it.

3) You really don't want to use:

from wxPython.wx import *

you should rather use:

import wx

Does Boa generate code like that?

Maybe you could narrow down the problem by creating a sample that Isn't 
the whole DoubleSlider, but is just a  simple Panel or something that 
you set the Cursors on.

-Chris


Tatiana Al-Chueyr Pereira Martins wrote:
> Hi all!
> 
> I was doing some tests, trying to create a new form of slider, where you 
> can
> resize the bar which defines min and max, and move this bar along x axis
> with the mouse.
> 
> In order to show easily the features for the user, the cursor is changed so
> that when one passes the mouse over the left/right border you see you can
> resize it, and when one passes the mouse over the center area, an open hand
> appears and when one presses the left button, the hand is closed, so you 
> can
> move it.
> 
> The problem is in the creation of this two "new cursors" (open and closed
> hand), from a png image, the transparency appears black in white background
> and white in black background. :( has anyone ever had this problem? do you
> know how to fix it?
> 
> I might be doing something very wrong, so I attached the code files 
> (they`re
> pretty durty job.. just wanted to see things working quickly) and the 
> images
> that I use to create the new cursors.
> 
> I`d be greatefull if someone could help me on this..!
> Thanks!
> 
> Tatiana
> 
> Using:
> Windows XP
> Python 2.3.5
> wxPython 2.4.2.4
> 
> 
> ------------------------------------------------------------------------
> 
> 
> ------------------------------------------------------------------------
> 
> 
> ------------------------------------------------------------------------
> 
> #!/usr/bin/env python
> #Boa:App:BoaApp
> 
> from wxPython.wx import *
> 
> import wxDoubleSlider
> 
> modules ={'wxDoubleSlider': [1, 'Main frame of Application', 'wxDoubleSlider.py']}
> 
> class BoaApp(wxApp):
>     def OnInit(self):
>         wxInitAllImageHandlers()
>         self.main = wxDoubleSlider.create(None)
>         self.main.Show()
>         self.SetTopWindow(self.main)
>         return True
> 
> def main():
>     application = BoaApp(0)
>     application.MainLoop()
> 
> if __name__ == '__main__':
>     main()
> 
> 
> ------------------------------------------------------------------------
> 
> #Boa:Frame:wxDoubleSlider
> 
> from wxPython.wx import *
> from wxPython.lib.intctrl import * # necessary for using wxIntCtrl (int text box)
> 
> def create(parent):
>     return wxDoubleSlider(parent)
> 
> [wxID_WXDOUBLESLIDER, wxID_WXDOUBLESLIDERBUTTON, 
>  wxID_WXDOUBLESLIDERSTATICLINE1, wxID_WXDOUBLESLIDERTEXTLEFT, 
>  wxID_WXDOUBLESLIDERTEXTRIGHT, 
> ] = map(lambda _init_ctrls: wxNewId(), range(5))
> 
> class wxDoubleSlider(wxFrame):
>     def _init_ctrls(self, prnt):
>         # generated method, don't edit
>         wxFrame.__init__(self, id=wxID_WXDOUBLESLIDER, name='wxDoubleSlider',
>               parent=prnt, pos=wxPoint(279, 288), size=wxSize(240, 34),
>               style=wxDEFAULT_FRAME_STYLE, title='Double Slider')
>         self.SetClientSize(wxSize(240, 34))
> 
>         self.textLeft = wxIntCtrl(allow_long=False, allow_none=False,
>               default_color=wxBLACK, id=wxID_WXDOUBLESLIDERTEXTLEFT,
>               limited=False, max=4000, min=0, name='textLeft', oob_color=wxRED,
>               parent=self, pos=wxPoint(2, 4), size=wxSize(36, 26), style=0,
>               value=0)
> 
>         self.textRight = wxIntCtrl(allow_long=False, allow_none=False,
>               default_color=wxBLACK, id=wxID_WXDOUBLESLIDERTEXTRIGHT,
>               limited=False, max=4000, min=0, name='textRight', oob_color=wxRED,
>               parent=self, pos=wxPoint(202, 4), size=wxSize(36, 26), style=0,
>               value=0)
> 
>         self.staticLine1 = wxStaticLine(id=wxID_WXDOUBLESLIDERSTATICLINE1,
>               name='staticLine1', parent=self, pos=wxPoint(40, 16),
>               size=wxSize(160, 1), style=wxTRANSPARENT_WINDOW)
> 
>         self.button = wxButton(id=wxID_WXDOUBLESLIDERBUTTON, label='',
>               name='button', parent=self, pos=wxPoint(41, 6), size=wxSize(160,
>               22), style=0)
> 
>     def __init__(self, parent):
>         
>         self._init_ctrls(parent)        
>         self.vars() # global attributes
>         self.evt() # treated events
>         
>         # setting initial values for text areas
>         self.SetRange(self.thresholdMin, self.thresholdMax)
>         
>         
>         
>     def SetRange(self, minValue, maxValue):
>         self.textRight.SetValue(maxValue)
>         self.textRight.SetMax(maxValue)
>         self.textLeft.SetValue(minValue)
>         self.textLeft.SetMin(minValue)
> 
>     def GetMin(self, value):
>         value = self.textLeft.GetValue()
>         
>     def GetMax(self, value):
>         value = self.textRight.GetValue()
>         
>     def vars(self):
>         
>         
>         # Control if button will move or not
>         self.case = "null"
>         self.buttonMove = 0
>         
>         # Vertical button position won't change
>         self.verticalPos = self.button.GetPosition()[1]
>         
>         
>         self.leftLimit = self.staticLine1.GetPosition()[0]
>         self.rightLimit = self.staticLine1.GetSize()[0] + self.staticLine1.GetPosition()[0]
>         
>         self.leftNewPos = self.leftLimit
>         self.rightNewPos = self.rightLimit
>         
>         buttonSize = self.rightNewSize = self.button.GetSize()[0]
>         
>         
>         # Limits of the permited moving area for the button
>         self.leftButtontAreaLimit = self.staticLine1.GetPosition()[0]
>         self.rightButtontAreaLimit = self.staticLine1.GetSize()[0] + self.staticLine1.GetPosition()[0]
>         
>         # Threshold values - to be setted
>         self.thresholdMin = 0
>         self.thresholdMax = 4000
>         self.thresholdQuotient = (self.thresholdMax - self.thresholdMin)/buttonSize
>         
>         
>         # Cursors
>         self.wxOPENHAND_CURSOR = wxCursorFromImage(wxImage('/home/tati/imagens/icones/openhand-final.png'))
>         self.wxCLOSEHAND_CURSOR = wxCursorFromImage(wxImage('/home/tati/imagens/icones/closehand.png'))
>         
> 
>                 
>     def evt(self):
> 
>         # events related to the button        
>         EVT_LEFT_DOWN(self.button, lambda e: self.click_button(e))
>         EVT_MOTION(self.button, lambda e:self.move_button(e))
>         EVT_LEAVE_WINDOW(self.button, lambda e:self.leave_button(e))
>         EVT_LEFT_UP(self.button, lambda e:self.unclick_button(e))
>         
>         # events related to the text area
>         EVT_TEXT(self.textLeft, self.textLeft.GetId(), self.checkLeftText)
>         EVT_KEY_DOWN(self.textLeft, self.updateLeftText)
>         #EVT_LEAVE_WINDOW(self.textLeft, self.updateLeftText)
>         EVT_TEXT(self.textRight, self.textRight.GetId(), self.checkRightText)
>         EVT_KEY_DOWN(self.textRight, self.updateRightText)
>         #EVT_LEAVE_WINDOW(self.textRight, self.updateRightText)
> 
> #-------------------------------------------------------------------------------
> 
>     def click_button(self, event):
>         
>         if (-1 < event.GetX() < 5):
>             self.case = "left"
>             self.lastX = event.GetX()
>         elif ( (self.button.GetSize()[0]-5) < event.GetX() < (self.button.GetSize()[0]+1) ):
>             self.case = "right"
>             self.lastX = event.GetX()
>         elif ( ((self.button.GetSize()[0]/2)-5) < event.GetX() < ((self.button.GetSize()[0]/2)+5) ):
>             self.case = "center"
>             self.lastX = event.GetX()
>             cursor = self.wxCLOSEHAND_CURSOR
>             self.button.SetCursor(cursor)
>         else:
>             self.case = "null"
>                 
>         if (self.case == "left") or (self.case == "right") or (self.case == "center"):
>             self.buttonMove = 1
>         
>         event.Skip()
>         
>     
>     def move_button(self, event):
>         # related to movement and resize of the button
> 
>         if (-1 < event.GetX() < 5):
>             self.cursorCase = "left"
>         elif ( (self.button.GetSize()[0]-5) < event.GetX() < (self.button.GetSize()[0]+1) ):
>             self.cursorCase = "right"
>         elif ( ((self.button.GetSize()[0]/2)-5) < event.GetX() < ((self.button.GetSize()[0]/2)+5) ):
>             self.cursorCase = "center"
>         elif (not self.buttonMove):
>             self.cursorCase = "null"
>         
>         # CHECKING CURSOR
>         if (self.buttonMove):
>             if (self.cursorCase == "left") or (self.cursorCase == "right"):
>                 cursor = wxStockCursor(wxCURSOR_SIZEWE)
>                 self.button.SetCursor(cursor)
>             elif (self.cursorCase == "center"):
>                 cursor = self.wxCLOSEHAND_CURSOR
>                 self.button.SetCursor(cursor)
>             else:
>                 cursor = wxSTANDARD_CURSOR
>                 self.button.SetCursor(cursor)
>         else: # (not self.buttonMove)
>             if (self.cursorCase == "left") or (self.cursorCase == "right"):
>                 cursor = wxStockCursor(wxCURSOR_SIZEWE)
>                 self.button.SetCursor(cursor)
>             elif (self.cursorCase == "center"):
>                 cursor = self.wxOPENHAND_CURSOR
>                 self.button.SetCursor(cursor)
>             else:
>                 cursor = wxSTANDARD_CURSOR
>                 self.button.SetCursor(cursor)
>         
>         
>         # CHECKING MOVEMENT
>         if (self.buttonMove):
>             if (self.case == "left"):
>                 if ((self.lastX - event.GetX()) <= 0):
>                     diffX = abs(self.lastX - event.GetX())
>                     self.leftNewPos = self.leftNewPos + diffX
>                     case = 1
>                 else:
>                     diffX = abs(self.lastX - event.GetX())
>                     self.leftNewPos = self.leftNewPos - diffX
>                     case = 2
> 
>                 if (self.leftButtontAreaLimit <= self.leftNewPos < (self.rightLimit - 10)):
>                     # setting the new button size
>                     if (case == 1):
>                         buttonSizeX = self.button.GetSize()[0] - diffX
>                     else:
>                         buttonSizeX = self.button.GetSize()[0] + diffX
>                         
>                     buttonSizeY = self.button.GetSize()[1]
>                     self.button.SetSize((buttonSizeX, buttonSizeY))
>                     
>                     # putting the button in the right position
>                     self.button.SetPosition((self.leftNewPos, self.verticalPos))
>                     self.leftLimit = self.leftNewPos
>                     
>                 else:
>                     self.leftNewPos = self.leftLimit
>                 
>                 self.textLeft.SetValue((self.leftNewPos - 40)*self.thresholdQuotient)                
>                 
>                 
>             elif (self.case == "right"):
>                 
>                 self.rightNewSize = self.button.GetSize()[0]
>                 diffX = abs(self.lastX - event.GetX())
> 
>                 if ((self.lastX - event.GetX()) >= 0):
>                     self.rightNewSize =  self.rightNewSize - diffX
>                     self.rightNewPos = self.rightNewSize + self.button.GetPosition()[0] 
>                     self.lastX = self.lastX - diffX
>                 else:
>                     self.rightNewSize =  self.rightNewSize + diffX 
>                     self.rightNewPos = self.rightNewSize + self.button.GetPosition()[0]
>                     self.lastX = self.lastX + diffX
> 
>  
>                 if (self.rightButtontAreaLimit >= self.rightNewPos> (self.leftLimit + 10)):
>                     buttonSizeY = self.button.GetSize()[1]
>                     self.button.SetSize((self.rightNewSize, buttonSizeY))
>                     self.rightLimit = self.rightNewPos
>                         
>                 else:
>                     self.rightNewPos = self.rightLimit
>                     
>                 self.textRight.SetValue((self.rightNewPos - 40)*self.thresholdQuotient)
>             elif (self.case == "center"):
>                 (X, Y) = self.button.GetPosition()
>                 diffX = self.lastX - event.GetX()
>                 if ((X-diffX) >= self.leftButtontAreaLimit) and ((X-diffX + self.button.GetSize()[0]) <= self.rightButtontAreaLimit):
>                     self.button.SetPosition((X-diffX, Y))
>                     self.leftNewPos = self.leftLimit = (X-diffX)
> ##                    print "moveButton:   self.leftLimit", self.leftLimit
>                     self.rightNewPos = self.rightLimit = (X-diffX+self.button.GetSize()[0])
>                     self.textLeft.SetValue((X-diffX - 40)*self.thresholdQuotient)
>                     self.textRight.SetValue((X-diffX - 40 + self.button.GetSize()[0])*self.thresholdQuotient)
>                 
>                 
>             else:
>                 pass
>         else: # (not self.buttonMove)
>             if (self.case == "left") or (self.case == "right"):
>                 #print "nao move"
>                 pass
>             else:
>                 #print "nao move"
>                 pass
>         
>         event.Skip()
> 
>     def unclick_button(self, event):
>         
>         cursor = wxSTANDARD_CURSOR
>         self.button.SetCursor(cursor)
>         self.buttonMove = 0
>         self.case = "null"
>         
>         event.Skip()
>     
>     
>     def leave_button(self, event):
>         
>         cursor = wxSTANDARD_CURSOR
>         self.button.SetCursor(cursor)
>         self.buttonMove = 0
>         self.case = "null"
>         
>         event.Skip()
> 
> 
> 
> #-------------------------------------------------------------------------------
>     def checkLeftText(self, event):
>             
>         self.currentLeftTextValue = self.textLeft.GetValue()
>         self.pos_currentLeftTextValue = (self.currentLeftTextValue/self.thresholdQuotient) + 40
> 
>         maxValue = (self.rightLimit - 40)*self.thresholdQuotient - 1
>         self.textLeft.SetMax(maxValue)
>         
>         
>         if (self.leftButtontAreaLimit <= self.pos_currentLeftTextValue < self.rightLimit):
>             self.validValue = 1
>         else:
>             self.validValue = 0
>             
>         event.Skip()
>         
> 
>     def updateLeftText(self, event):
>         
>         
>         if (event.GetKeyCode() == 13): #enter
>             
>             if self.validValue:
>                 
>                 if (self.pos_currentLeftTextValue < self.rightLimit - 10):
>                     self.leftNewPos = self.leftLimit = newPos = self.pos_currentLeftTextValue
>                 else: #elif ( self.rightLimit - 10 <= self.pos_currentLeftTextValue < self.rightLimit):
>                     self.leftNewPos = self.leftLimit = newPos = self.rightLimit - 11
>                     
>                 lastPos = (self.button.GetPosition()[0])
>                 diff = newPos - lastPos
>                 
>                 buttonSizeX = self.button.GetSize()[0] - diff
>                 buttonSizeY = self.button.GetSize()[1]
>                 
>                 self.button.SetPosition((newPos, self.verticalPos))
>                 self.button.SetSize((buttonSizeX, buttonSizeY))
> 
>         event.Skip()
>         
> 
>         
>     def checkRightText(self, event):
>         
>         self.currentRightTextValue = self.textRight.GetValue()
>         self.pos_currentRightTextValue = (self.currentRightTextValue/self.thresholdQuotient) + 40
> 
>         minValue = (self.leftLimit - 40)*self.thresholdQuotient + 1
>         self.textRight.SetMin(minValue)
>         
>         
>         max = (self.rightButtontAreaLimit- 40)* self.thresholdQuotient
>         min = (self.leftLimit - 40)*self.thresholdQuotient
>         
>         if (min < self.currentRightTextValue <= max):
>             self.validValue = 1
>         else:
>             self.validValue = 0
>             
>         event.Skip()
>         
> 
>     def updateRightText(self, event):
>         
>         
>         if (event.GetKeyCode() == 13): #enter
>             
>             if self.validValue:
>                 
>                 if (self.pos_currentRightTextValue > self.leftLimit + 10):
>                     self.rightNewPos = self.rightLimit = newPos = self.pos_currentRightTextValue
>                 else: #elif ( self.rightLimit - 10 <= self.pos_currentLeftTextValue < self.rightLimit):
>                     self.rightNewPos = self.rightLimit = newPos = self.leftLimit + 11
>                     
>                 lastPos = (self.button.GetPosition()[0] + self.button.GetSize()[0])
>                 
>                 diff = newPos - lastPos
>                 
> 
>                 buttonSizeX = self.button.GetSize()[0] + diff
>                 buttonSizeY = self.button.GetSize()[1]
>                                
>                 self.button.SetSize((buttonSizeX, buttonSizeY))
> 
>         event.Skip()
> 
> 
> 
> 
> ------------------------------------------------------------------------
> 
> #Boa:Frame:wxDoubleSlider
> 
> from wxPython.wx import *
> from wxPython.lib.intctrl import * # necessary for using wxIntCtrl (int text box)
> 
> def create(parent):
>     return wxDoubleSlider(parent)
> 
> [wxID_WXDOUBLESLIDER, wxID_WXDOUBLESLIDERBACKGROUNDLINE, 
>  wxID_WXDOUBLESLIDERBUTTON, wxID_WXDOUBLESLIDERDOUBLESLIDERPANEL, 
>  wxID_WXDOUBLESLIDERLEFTTEXT, wxID_WXDOUBLESLIDERRIGHTTEXT, 
>  wxID_WXDOUBLESLIDERTRANSPARENTPANEL, 
> ] = map(lambda _init_ctrls: wxNewId(), range(7))
> 
> class wxDoubleSlider(wxFrame):
>     def _init_ctrls(self, prnt):
>         # generated method, don't edit
>         wxFrame.__init__(self, id=wxID_WXDOUBLESLIDER, name='wxDoubleSlider',
>               parent=prnt, pos=wxPoint(305, 361), size=wxSize(248, 70),
>               style=wxDEFAULT_FRAME_STYLE, title='Double Slider')
>         self.SetClientSize(wxSize(240, 34))
> 
>         self.doubleSliderPanel = wxPanel(id=wxID_WXDOUBLESLIDERDOUBLESLIDERPANEL,
>               name='doubleSliderPanel', parent=self, pos=wxPoint(0, 0),
>               size=wxSize(240, 34), style=wxTAB_TRAVERSAL)
> 
>         self.backgroundLine = wxStaticLine(id=wxID_WXDOUBLESLIDERBACKGROUNDLINE,
>               name='backgroundLine', parent=self.doubleSliderPanel,
>               pos=wxPoint(40, 16), size=wxSize(160, 1), style=0)
>         self.backgroundLine.Enable(False)
>         self.backgroundLine.SetForegroundColour(wxColour(223, 224, 227))
> 
>         self.transparentPanel = wxPanel(id=wxID_WXDOUBLESLIDERTRANSPARENTPANEL,
>               name=u'transparentPanel', parent=self.doubleSliderPanel,
>               pos=wxPoint(0, 0), size=wxSize(240, 34),
>               style=wxTRANSPARENT_WINDOW)
>         self.transparentPanel.Show(True)
> 
>         self.leftText = wxIntCtrl(allow_long=False, allow_none=False,
>               default_color=wxBLACK, id=wxID_WXDOUBLESLIDERLEFTTEXT,
>               limited=False, max=4000, min=0, name='leftText', oob_color=wxRED,
>               parent=self.transparentPanel, pos=wxPoint(2, 4), size=wxSize(36,
>               26), style=0, value=0)
> 
>         self.rightText = wxIntCtrl(allow_long=False, allow_none=False,
>               default_color=wxBLACK, id=wxID_WXDOUBLESLIDERRIGHTTEXT,
>               limited=False, max=4000, min=0, name='rightText', oob_color=wxRED,
>               parent=self.transparentPanel, pos=wxPoint(202, 4), size=wxSize(36,
>               26), style=0, value=0)
> 
>         self.button = wxButton(id=wxID_WXDOUBLESLIDERBUTTON, label='',
>               name='button', parent=self.transparentPanel, pos=wxPoint(41, 6),
>               size=wxSize(160, 22), style=0)
> 
>     def __init__(self, parent):
>         
>         self._init_ctrls(parent)        
>         self.vars() # global attributes
>         self.evt() # events to be considerated
>         
>         print "background", self.transparentPanel.GetBackgroundColour()
>         #self.transparentPanel.SetBackgroundColour(wxTransparent)
>         #print "background (depois)", self.transparentPanel.GetBackgroundColour()
>         print "foreground", self.transparentPanel.GetForegroundColour()
>         
>         self.SetRange(self.minValue, self.maxValue)
>         
>         
>     def SetRange(self, minValue, maxValue):
>         self.rightText.SetValue(maxValue)
>         self.rightText.SetMax(maxValue)
>         self.leftText.SetValue(minValue)
>         self.leftText.SetMin(minValue)
> 
>     def GetMin(self, value):
>         value = self.leftText.GetValue()
>         
>     def GetMax(self, value):
>         value = self.rightText.GetValue()
>         
>     def vars(self):
>         import sys
>         
>         
>         buttonSize = self.rightNewSize = self.button.GetSize()[0]
>         
>         # setting range value
>         self.minValue = 0
>         self.maxValue = 4000
>         self.quotientValue = (self.maxValue - self.minValue)/buttonSize
>         
>         
>         # used to control movement and resizing of the button
>         self.case = "null"
>         self.buttonMove = 0
> 
>         self.leftLimit = self.backgroundLine.GetPosition()[0]
>         self.rightLimit = self.backgroundLine.GetSize()[0] + self.backgroundLine.GetPosition()[0]
>         
>         self.leftNewPos = self.leftLimit
>         self.rightNewPos = self.rightLimit
>         
>         
>         # vertical button position -> won't change
>         self.verticalPos = self.button.GetPosition()[1]
>         
>         
>         
> 
>         # Limits of the permited moving area for the button
>         self.leftButtontAreaLimit = self.backgroundLine.GetPosition()[0]
>         self.rightButtontAreaLimit = self.backgroundLine.GetSize()[0] + self.backgroundLine.GetPosition()[0]
>         
> 
>         # New cursors used
>         
>         if (sys.platform == 'win32'):
>             dir = "C:/Tati/desenvolvendo/double_slider_3/"
>         else:
>             dir = '/home/tati/promed3.0/Icones/'
>             
>         self.wxOPENHAND_CURSOR = wxCursorFromImage(wxImage(dir + 'cursor_openhand.png'))
>         self.wxCLOSEHAND_CURSOR = wxCursorFromImage(wxImage(dir + 'cursor_closehand.png'))
> 
>         
>                 
>     def evt(self):
> 
>         # events related to the button        
>         EVT_LEFT_DOWN(self.button, lambda e: self.click_button(e))
>         EVT_MOTION(self.button, lambda e:self.move_button(e))
>         EVT_LEAVE_WINDOW(self.button, lambda e:self.leave_button(e))
>         EVT_LEFT_UP(self.button, lambda e:self.unclick_button(e))
>         
>         # events related to the text area
>         EVT_TEXT(self.leftText, self.leftText.GetId(), self.checkLeftText)
>         EVT_KEY_DOWN(self.leftText, self.updateLeftText)
>         #EVT_LEAVE_WINDOW(self.leftText, self.updateLeftText)
>         EVT_TEXT(self.rightText, self.rightText.GetId(), self.checkRightText)
>         EVT_KEY_DOWN(self.rightText, self.updateRightText)
>         #EVT_LEAVE_WINDOW(self.rightText, self.updateRightText)
> 
> #-------------------------------------------------------------------------------
> #---------------------------Resize and Move Button------------------------------
> #-------------------------------------------------------------------------------
> 
>     def click_button(self, event):
>         
>         if (-1 < event.GetX() < 5):
>             self.case = "left"
>             self.lastX = event.GetX()
>         elif ( (self.button.GetSize()[0]-5) < event.GetX() < (self.button.GetSize()[0]+1) ):
>             self.case = "right"
>             self.lastX = event.GetX()
>         elif ( ((self.button.GetSize()[0]/2)-5) < event.GetX() < ((self.button.GetSize()[0]/2)+5) ):
>             self.case = "center"
>             self.lastX = event.GetX()
>             cursor = self.wxCLOSEHAND_CURSOR
>             self.button.SetCursor(cursor)
>         else:
>             self.case = "null"
>                 
>         if (self.case == "left") or (self.case == "right") or (self.case == "center"):
>             self.buttonMove = 1
>         
>         event.Skip()
>         
> #-------------------------------------------------------------------------------
> 
>     def move_button(self, event):
>         # related to movement and resize of the button
> 
>         if (-1 < event.GetX() < 5):
>             self.cursorCase = "left"
>         elif ( (self.button.GetSize()[0]-5) < event.GetX() < (self.button.GetSize()[0]+1) ):
>             self.cursorCase = "right"
>         elif ( ((self.button.GetSize()[0]/2)-5) < event.GetX() < ((self.button.GetSize()[0]/2)+5) ):
>             self.cursorCase = "center"
>         elif (not self.buttonMove):
>             self.cursorCase = "null"
>         
>         # CHECKING CURSOR
>         if (self.buttonMove):
>             if (self.cursorCase == "left") or (self.cursorCase == "right"):
>                 cursor = wxStockCursor(wxCURSOR_SIZEWE)
>                 self.button.SetCursor(cursor)
>             elif (self.cursorCase == "center"):
>                 cursor = self.wxCLOSEHAND_CURSOR
>                 self.button.SetCursor(cursor)
>             else:
>                 cursor = wxSTANDARD_CURSOR
>                 self.button.SetCursor(cursor)
>         else: # (not self.buttonMove)
>             if (self.cursorCase == "left") or (self.cursorCase == "right"):
>                 cursor = wxStockCursor(wxCURSOR_SIZEWE)
>                 self.button.SetCursor(cursor)
>             elif (self.cursorCase == "center"):
>                 cursor = self.wxOPENHAND_CURSOR
>                 
>                 self.button.SetCursor(cursor)
>             else:
>                 cursor = wxSTANDARD_CURSOR
>                 self.button.SetCursor(cursor)
>         
>         
>         # CHECKING MOVEMENT
>         if (self.buttonMove):
>             if (self.case == "left"):
>                 if ((self.lastX - event.GetX()) <= 0):
>                     diffX = abs(self.lastX - event.GetX())
>                     self.leftNewPos = self.leftNewPos + diffX
>                     case = 1
>                 else:
>                     diffX = abs(self.lastX - event.GetX())
>                     self.leftNewPos = self.leftNewPos - diffX
>                     case = 2
> 
>                 if (self.leftButtontAreaLimit <= self.leftNewPos < (self.rightLimit - 10)):
>                     # setting the new button size
>                     if (case == 1):
>                         buttonSizeX = self.button.GetSize()[0] - diffX
>                     else:
>                         buttonSizeX = self.button.GetSize()[0] + diffX
>                         
>                     buttonSizeY = self.button.GetSize()[1]
>                     self.button.SetSize((buttonSizeX, buttonSizeY))
>                     
>                     # putting the button in the right position
>                     self.button.SetPosition((self.leftNewPos, self.verticalPos))
>                     self.leftLimit = self.leftNewPos
>                     
>                 else:
>                     self.leftNewPos = self.leftLimit
>                 
>                 self.leftText.SetValue((self.leftNewPos - 40)*self.quotientValue)                
>                 
>                 
>             elif (self.case == "right"):
>                 
>                 self.rightNewSize = self.button.GetSize()[0]
>                 diffX = abs(self.lastX - event.GetX())
> 
>                 if ((self.lastX - event.GetX()) >= 0):
>                     self.rightNewSize =  self.rightNewSize - diffX
>                     self.rightNewPos = self.rightNewSize + self.button.GetPosition()[0] 
>                     self.lastX = self.lastX - diffX
>                 else:
>                     self.rightNewSize =  self.rightNewSize + diffX 
>                     self.rightNewPos = self.rightNewSize + self.button.GetPosition()[0]
>                     self.lastX = self.lastX + diffX
> 
>  
>                 if (self.rightButtontAreaLimit >= self.rightNewPos> (self.leftLimit + 10)):
>                     buttonSizeY = self.button.GetSize()[1]
>                     self.button.SetSize((self.rightNewSize, buttonSizeY))
>                     self.rightLimit = self.rightNewPos
>                         
>                 else:
>                     self.rightNewPos = self.rightLimit
>                     
>                 self.rightText.SetValue((self.rightNewPos - 40)*self.quotientValue)
>             elif (self.case == "center"):
>                 (X, Y) = self.button.GetPosition()
>                 diffX = self.lastX - event.GetX()
>                 if ((X-diffX) >= self.leftButtontAreaLimit) and ((X-diffX + self.button.GetSize()[0]) <= self.rightButtontAreaLimit):
>                     self.button.SetPosition((X-diffX, Y))
>                     self.leftNewPos = self.leftLimit = (X-diffX)
> ##                    print "moveButton:   self.leftLimit", self.leftLimit
>                     self.rightNewPos = self.rightLimit = (X-diffX+self.button.GetSize()[0])
>                     self.leftText.SetValue((X-diffX - 40)*self.quotientValue)
>                     self.rightText.SetValue((X-diffX - 40 + self.button.GetSize()[0])*self.quotientValue)
>                 
>                 
>             else:
>                 pass
>         else: # (not self.buttonMove)
>             if (self.case == "left") or (self.case == "right"):
>                 #print "nao move"
>                 pass
>             else:
>                 #print "nao move"
>                 pass
>         
>         event.Skip()
> 
> #-------------------------------------------------------------------------------
> 
>     def unclick_button(self, event):
>         
>         cursor = wxSTANDARD_CURSOR
>         self.button.SetCursor(cursor)
>         self.buttonMove = 0
>         self.case = "null"
>         
>         event.Skip()
>     
>     
>     def leave_button(self, event):
>         
>         cursor = wxSTANDARD_CURSOR
>         self.button.SetCursor(cursor)
>         self.buttonMove = 0
>         self.case = "null"
>         
>         event.Skip()
> 
> 
> #-------------------------------------------------------------------------------
> #-------------------------------Text Treatment----------------------------------
> #-------------------------------------------------------------------------------
>     def checkLeftText(self, event):
>             
>         self.currentLeftTextValue = self.leftText.GetValue()
>         self.pos_currentLeftTextValue = (self.currentLeftTextValue/self.quotientValue) + 40
> 
>         maxValue = (self.rightLimit - 40)*self.quotientValue - 1
>         self.leftText.SetMax(maxValue)
>         
>         
>         if (self.leftButtontAreaLimit <= self.pos_currentLeftTextValue < self.rightLimit):
>             self.validValue = 1
>         else:
>             self.validValue = 0
>             
>         event.Skip()
>         
> #-------------------------------------------------------------------------------
> 
>     def updateLeftText(self, event):
>         
>         
>         if (event.GetKeyCode() == 13): #enter
>             
>             if self.validValue:
>                 
>                 if (self.pos_currentLeftTextValue < self.rightLimit - 10):
>                     self.leftNewPos = self.leftLimit = newPos = self.pos_currentLeftTextValue
>                 else: #elif ( self.rightLimit - 10 <= self.pos_currentLeftTextValue < self.rightLimit):
>                     self.leftNewPos = self.leftLimit = newPos = self.rightLimit - 11
>                     
>                 lastPos = (self.button.GetPosition()[0])
>                 diff = newPos - lastPos
>                 
>                 buttonSizeX = self.button.GetSize()[0] - diff
>                 buttonSizeY = self.button.GetSize()[1]
>                 
>                 self.button.SetPosition((newPos, self.verticalPos))
>                 self.button.SetSize((buttonSizeX, buttonSizeY))
> 
>         event.Skip()
>         
> #-------------------------------------------------------------------------------
>         
>     def checkRightText(self, event):
>         
>         self.currentRightTextValue = self.rightText.GetValue()
>         self.pos_currentRightTextValue = (self.currentRightTextValue/self.quotientValue) + 40
> 
>         minValue = (self.leftLimit - 40)*self.quotientValue + 1
>         self.rightText.SetMin(minValue)
>         
>         
>         max = (self.rightButtontAreaLimit- 40)* self.quotientValue
>         min = (self.leftLimit - 40)*self.quotientValue
>         
>         if (min < self.currentRightTextValue <= max):
>             self.validValue = 1
>         else:
>             self.validValue = 0
>             
>         event.Skip()
>         
> #-------------------------------------------------------------------------------
> 
>     def updateRightText(self, event):
>         
>         
>         if (event.GetKeyCode() == 13): #enter
>             
>             if self.validValue:
>                 
>                 if (self.pos_currentRightTextValue > self.leftLimit + 10):
>                     self.rightNewPos = self.rightLimit = newPos = self.pos_currentRightTextValue
>                 else: #elif ( self.rightLimit - 10 <= self.pos_currentLeftTextValue < self.rightLimit):
>                     self.rightNewPos = self.rightLimit = newPos = self.leftLimit + 11
>                     
>                 lastPos = (self.button.GetPosition()[0] + self.button.GetSize()[0])
>                 
>                 diff = newPos - lastPos
>                 
> 
>                 buttonSizeX = self.button.GetSize()[0] + diff
>                 buttonSizeY = self.button.GetSize()[1]
>                                
>                 self.button.SetSize((buttonSizeX, buttonSizeY))
> 
>         event.Skip()
> 
> 
> 
> 
> ------------------------------------------------------------------------
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: wxPython-users-unsubscribe at lists.wxwidgets.org
> For additional commands, e-mail: wxPython-users-help at lists.wxwidgets.org

-- 
Christopher Barker, Ph.D.
Oceanographer
                                     		
NOAA/OR&R/HAZMAT         (206) 526-6959   voice
7600 Sand Point Way NE   (206) 526-6329   fax
Seattle, WA  98115       (206) 526-6317   main reception

Chris.Barker at noaa.gov




More information about the wxpython-users mailing list