2016-06-14 58 views
0

與標題一樣,是否可以爲wx小部件添加自定義事件偵聽器?如果是這樣,怎麼辦?更具體地說,我試圖添加一個偵聽wx.Slider的SelStart和SelEnd屬性的變化。 謝謝!wxpython小部件的自定義事件偵聽器

+0

是否有任何這裏http://docs.wxwidgets.org/trunk/classwx_slider.html上市工作爲您的目的的活動? – nbryans

+0

可能有一個複雜的方法可以使它與其中的一些工作,但我也對一般自定義偵聽器是否可行感興趣。 –

+0

根據[關於TrackBar控件的MSDN文檔](https://msdn.microsoft.com/en-us/library/windows/desktop/bb760149(v = vs.85).aspx)(其中''wx.Slider ''是基於的),範圍可以從代碼改變,但沒有來自用戶方的交互。它還表示,如果想要將有效滑塊位置限制在範圍內,則必須由程序員執行。這是你想要的嗎? – nepix32

回答

2

下面是wx.slider自定義偵聽器的代碼,我在其他偵聽器的處理程序中調用它。

您可以從SelStart和SelEnd更改點調用此自定義偵聽器。

import wx 
import wx.lib.newevent 
DialogRespondEvent, EVT_DIALOG_RESPOND_EVENT = wx.lib.newevent.NewEvent() 
class Mywin(wx.Frame): 

    def __init__(self, parent, title): 
     super(Mywin, self).__init__(parent, title = title,size = (250,150)) 
     self.InitUI() 

    def InitUI(self):  
     pnl = wx.Panel(self) 
     vbox = wx.BoxSizer(wx.VERTICAL) 
     self.Bind(EVT_DIALOG_RESPOND_EVENT, self.testing) 
     self.sld = wx.Slider(pnl, value = 10, minValue = 1, maxValue = 100, 
     style = wx.SL_HORIZONTAL|wx.SL_LABELS) 

     vbox.Add(self.sld,1,flag = wx.EXPAND | wx.ALIGN_CENTER_HORIZONTAL |  wx.TOP, border = 20) 
     self.sld.Bind(wx.EVT_SLIDER, self.OnSliderScroll) 
     self.txt = wx.StaticText(pnl, label = 'Hello',style = wx.ALIGN_CENTER)     
     vbox.Add(self.txt,1,wx.ALIGN_CENTRE_HORIZONTAL) 

     pnl.SetSizer(vbox) 
     self.Centre() 
     self.Show(True) 

    def testing(self,evt): 
     print "you can do whatever you want here" 

    def OnSliderScroll(self, e): 
     obj = e.GetEventObject() 
     val = obj.GetValue() 
     font = self.GetFont() 
     font.SetPointSize(self.sld.GetValue()) 
     self.txt.SetFont(font) 
     evt = DialogRespondEvent() 
     wx.PostEvent(self, evt) 

ex = wx.App() 
Mywin(None,'Slider demo') 
ex.MainLoop() 
+0

謝謝,我認爲,這很好 –

+0

謝謝,這解決了我的問題 –

相關問題