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