2016-05-09 2 views
0

У меня есть несколько виджетов в форме, например, так:wxSlider обновления wxTextCtrl и Visa Versa

self.sl_qZone1 = wx.Slider(self, -1, 50, integer=True, 0, 100, size=(sliderWidthHeight), style=wx.SL_HORIZONTAL) 
    self.tc_qZone1 = wx.TextCtrl(panel, -1, 50, (0,0), style=wx.TE_CENTER) 

Я некоторые события связаны, как так дюжины ползунков/текстовые элементы управления:

 wx.FindWindowByName(mvName['sl0']).Bind(wx.EVT_SLIDER, lambda event: self.sliderUpdate(event, wx.FindWindowByName(mvName['sl0']), wx.FindWindowByName(mvName['tc0']),), wx.FindWindowByName(mvName['sl0'])) 
     wx.FindWindowByName(mvName['tc0']).Bind(wx.EVT_CHAR, lambda event: self.tcVolUpdate(event, wx.FindWindowByName(mvName['sl0']), wx.FindWindowByName(mvName['tc0']),), wx.FindWindowByName(mvName['tc0'])) 

И тогда у меня есть следующие функции:

def sliderUpdate(self, event, slider, textctrl): 
     textctrl.SetValue(str(slider.GetValue())) 

    def tcVolUpdate(self, event, slider, textctrl): 
     slider.SetValue(int(textctrl.GetValue()))  

Он отлично работает, когда я изменяю ползунок - он обновляет textctrl с помощью соответствующее значение. Но когда я пытаюсь редактировать textctrl, он позволяет мне выбирать текст, но не редактировать его. Я пробовал wx.EVT_TEXT_ENTER, а также не повезло.

Как обновить текст ctrl и обновить значение ползунка?

ответ

1

Установите стиль в textctrl, чтобы включить wx.TE_PROCESS_ENTER, затем вы можете использовать EVT_TEXT_ENTER для привязки.

#!/usr/bin/python 
import wx 

class ex2(wx.Dialog): 
    def __init__(self, parent, id, title): 
     wx.Dialog.__init__(self, parent, id, title, wx.DefaultPosition, wx.Size(400, 420)) 

     panel = wx.Panel(self, -1) 
     vbox = wx.BoxSizer(wx.HORIZONTAL) 
     self.sl_qZone1 = wx.Slider(panel, -1, 50, 0, 100, size=(20,200), style=wx.SL_HORIZONTAL) 
     self.tc_qZone1 = wx.TextCtrl(panel, -1, value="", style=wx.TE_CENTER|wx.TE_PROCESS_ENTER) 

     self.sl_qZone1.Bind(wx.EVT_SLIDER, lambda event: self.sliderUpdate(event, self.sl_qZone1,self.tc_qZone1)) 
     self.tc_qZone1.Bind(wx.EVT_TEXT_ENTER, lambda event: self.tcVolUpdate(event, self.sl_qZone1,self.tc_qZone1)) 

     vbox.Add(self.sl_qZone1, 1, wx.EXPAND | wx.TOP | wx.RIGHT | wx.LEFT | wx.BOTTOM, 15) 
     vbox.Add(self.tc_qZone1, 1, wx.ALIGN_CENTER | wx.TOP | wx.BOTTOM, 20) 
     panel.SetSizer(vbox) 
     self.Centre() 

    def sliderUpdate(self, event, slider, textctrl): 
     textctrl.SetValue(str(slider.GetValue())) 

    def tcVolUpdate(self, event, slider, textctrl): 
     slider.SetValue(int(textctrl.GetValue()))  


class MyApp(wx.App): 
    def OnInit(self): 
     frame = ex2(None, -1, 'Example 2') 
     frame.ShowModal() 
     frame.Destroy() 
     return True 

 Смежные вопросы

  • Нет связанных вопросов^_^