wx滑块绑定函数返回twi

2024-09-28 22:33:39 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个滑块,我想从中获取位置值(例如,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

为什么会这样?在


Tags: 函数selfinitdefargskwargsslider滑块
2条回答

如果希望滑块更改事件只触发一次,请使用以下选项:

self.slider.Bind(wx.EVT_COMMAND_SCROLL_THUMBTRACK, self.sliderUpdate)
self.slider.Bind(wx.EVT_COMMAND_SCROLL_CHANGED, self.sliderUpdate)

简单地说,第一个是在您使用鼠标更改滑块时触发的,第二个是在您使用键盘更改滑块时触发的。就像另一个答案说的,wx.EVT_滑块用于更改滑块和释放鼠标。在

有关与滑块关联的各种事件的详细信息,请查看this。在

值的每次更改都会得到一个事件,释放鼠标按钮时会得到一个额外的事件。如果这真的减慢了你的程序,你可以存储最后一个值,并与当前值进行比较,只在该值发生变化时才进行耗时的计算。在

def slider_update(self, _event):
    value = self.slider.GetValue()
    if value != self.value:
        print value
        self.value = value

相关问题 更多 >