2016-06-14 15 views
0

タイトルのように、wxウィジェットのカスタムイベントリスナーを追加できますか?特に、私はwx.SliderのSelStartとSelEnd属性の変更をリッスンするものを追加しようとしています。 ありがとう!wxpythonウィジェットのカスタムイベントリスナー

+0

ここに記載されているイベントのいずれかがあなたの目的のために働くhttp://docs.wxwidgets.org/trunk/classwx_slider.htmlますか? – nbryans

+0

いくつかのもので動作させるには複雑な方法があるかもしれませんが、一般的にカスタムリスナーが可能かどうかも興味があります。 –

+0

[MSDN doc on TrackBar Control](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

ありがとう、これは私の問題を解決した –

関連する問題