Hi all, I have a question regarding wxSlider. I'm developing a wxwidget python interface for a robotic hand. The sliders send the target values to the joints.
I'd like to display the current position of the joint on the slider. I wanted to use wxSlider.SetTick(myposition) but I couldn't get SetTick to display anything. Anyone has an idea ? I attached a dummy code to the message to illustrate. Cheers, Ugo -- Ugo Cupcic http://www.genugo.com/ugocupcic _ ' v ' / \ m m
#!/usr/bin/python import sys sys.path.append("python_hand_library/") from shadowhand import ShadowHand # import the wxPython GUI package import wx # Create a new frame class, derived from the wxPython Frame. class MyFrame(wx.Frame): def __init__(self, parent, id, title): # First, call the base class' __init__ method to create the frame wx.Frame.__init__(self, parent, id, title) #shadow arm -> TODO : use dialog window to set ssh / not ssh self.myShadowHand = ShadowHand(0) # Add a panel and some controls to display the size and position panel = wx.Panel(self, -1) #display a slider for each joints self.joints = [] self.labels = [] self.sliders = [] self.slidervalues = [] for joint in self.myShadowHand.handJoints: self.slidervalues.append(self.myShadowHand.valueof(joint.name)) self.joints.append(joint) self.labels.append(wx.StaticText(panel, -1, joint.name)) self.sliders.append(wx.Slider(panel, -1, value = self.myShadowHand.valueof(joint.name), minValue = joint.min, maxValue = joint.max, size=(25,200), style = wx.VERTICAL | wx.SL_LABELS | wx.SL_AUTOTICKS )) self.panel = panel # initialize the positions + sendupdate only when relevant self.oldPositions = [] for joint in self.joints: self.oldPositions.append(self.myShadowHand.valueof(joint.name)) # Use some sizers for layout of the widgets sizer = wx.FlexGridSizer(vgap=5, hgap=20) subsizers = [] index = 0 for label in self.labels: # draw the stuff subsizerTmp = wx.FlexGridSizer(rows=2, cols=1, vgap = 10) subsizerTmp.Add(self.sliders[index]) subsizerTmp.Add(label) subsizers.append(subsizerTmp) index += 1 for subsizer in subsizers: sizer.Add(subsizer) self.timer = wx.Timer(self) # bind the slider event self.Bind(wx.EVT_SLIDER, self.sliderUpdate) self.Bind(wx.EVT_TIMER, self.update, self.timer) self.timer.Start(250) border = wx.BoxSizer() border.Add(sizer, 0, wx.ALL, 15) panel.SetSizerAndFit(border) self.Fit() def sliderUpdate(self, event): index = 0 for slider in self.sliders: #value_tmp = slider.GetValue() #if self.oldPositions[index] != value_tmp: # self.myShadowHand.sendupdate(self.joints[index].name, value_tmp) self.slidervalues[index] = slider.GetValue() #index += 1 #self.myShadowHand.resend_targets(self.slidervalues) def update(self, event): self.myShadowHand.resend_targets(self.slidervalues) # Every wxWidgets application must have a class derived from wx.App class MyApp(wx.App): # wxWindows calls this method to initialize the application def OnInit(self): # Create an instance of our customized Frame class frame = MyFrame(None, -1, "Joint Sliders") frame.Show(True) # Tell wxWindows that this is our main window self.SetTopWindow(frame) # Return a success flag return True app = MyApp(0) # Create an instance of the application class app.MainLoop() # Tell it to start processing events
-- http://mail.python.org/mailman/listinfo/python-list