我有一个滑块,我想取位置值(即; 1,2,3等),并在另一个函数中使用。但是,每当滑块位置改变时,它似乎返回滑块的值两次;从而导致我的其他功能运行两次,这会减慢一切。 这是我的意思的一个简单例子。
import wx
class windowClass(wx.Frame):
def __init__(self, *args, **kwargs):
super(windowClass, self).__init__(*args, **kwargs)
self.basicGUI()
def basicGUI(self):
panel = wx.Panel(self)
self.slider = wx.Slider(panel, -1, 2, 0, 4, pos=(10,25), size=(250,-1), style=wx.SL_AUTOTICKS | wx.SL_LABELS)
sliderText = wx.StaticText(panel, -1, 'Slider', (8,8))
self.Bind(wx.EVT_SLIDER, self.sliderUpdate)
self.SetTitle('Sliders Window!')
self.Show(True)
def sliderUpdate(self, event):
value = self.slider.GetValue()
print value
def main():
app = wx.App()
windowClass(None)
app.MainLoop()
main()
当滑块位置发生变化时,我看到两个相同的值打印到控制台,如图http://i.imgur.com/4nkcTtp.jpg?1
所示为什么会这样?
答案 0 :(得分:2)
如果您希望滑块更改事件仅触发一次,请使用以下:
self.slider.Bind(wx.EVT_COMMAND_SCROLL_THUMBTRACK, self.sliderUpdate)
self.slider.Bind(wx.EVT_COMMAND_SCROLL_CHANGED, self.sliderUpdate)
简单地说,当您使用鼠标更改滑块时会触发第一个滑块,而使用键盘更改滑块时会触发第二个滑块。就像其他答案所说的那样,wx.EVT_SLIDER会在更改滑块和释放鼠标时被触发。
请查看this,了解与滑块相关的各种事件的详细信息。
答案 1 :(得分:0)
每次更改值时都会获得一个事件,释放鼠标按钮时会有一个额外事件。如果这真的会大大减慢您的程序速度,您可以存储最后一个值并将其与当前值进行比较,并仅在该值发生更改时进行耗时的计算。
def slider_update(self, _event):
value = self.slider.GetValue()
if value != self.value:
print value
self.value = value