wx.ScrolledWindow的scroll事件如何才能激发?

classic Classic list List threaded Threaded
3 messages Options
Reply | Threaded
Open this post in threaded view
|

wx.ScrolledWindow的scroll事件如何才能激发?

MaLi-3
表8.7 滚动条的事件

EVT_SCROLL:当任何滚动事件被触发时发生。

EVT_SCROLL_BOTTOM:当用户移动滚动条到它的范围的最末端时触发(底边或右边,依赖于方向)。

EVT_SCROLL_ENDSCROLL:在微软的Windows中,任何滚动会话的结束都将触发该事件,不管是因鼠标拖动或按键按下。

EVT_SCROLL_LINEDOWN:当用户向下滚动一行时触发。

EVT_SCROLL_LINEUP:当用户向上滚动一行时触发。

EVT_SCROLL_PAGEDOWN:当用户向下滚动一页时触发。

EVT_SCROLL_PAGEUP:当用户向上滚动一页时触发。

EVT_SCROLL_THUMBRELEASE :用户使用鼠标拖动滚动条滚动不超过一页的范围,并释放鼠标后,触发该事件。

EVT_SCROLL_THUMBTRACK:滚动条在一页内被拖动时不断的触发。

EVT_SCROLL_TOP:当用户移动滚动条到它的范围的最始端时触发,可能是顶端或左边,依赖于方向而定。

class drawtmp(wx.ScrolledWindow):
    def __init__(self,parent):
        wx.ScrolledWindow.__init__(self, parent,style=wx.HSCROLL)
        self.SetScrollbars(1, 1, 1600, 1400)
        self.FitInside()
        self.Scroll(10, 10)
        self.Bind(wx.EVT_SCROLL,self.OnScroll)

    def OnScroll(self,evt):
        print "on scrolling"

windows环境下,上面的这几个事件全都试过了,鼠标拖拉,滚轴,一点都没激发的意思,难道是方法错了?



_______________________________________________
python-chinese
Post: send [hidden email]
Subscribe: send subscribe to [hidden email]
Unsubscribe: send unsubscribe to  [hidden email]
Detail Info: http://python.cn/mailman/listinfo/python-chinese
Reply | Threaded
Open this post in threaded view
|

Re: wx.ScrolledWindow的scroll事件如何才能激发?

clfff.peter
试试 EVT_SCROLLWIN

在07-12-26,MaLi <[hidden email]> 写道:
表8.7 滚动条的事件

EVT_SCROLL:当任何滚动事件被触发时发生。

EVT_SCROLL_BOTTOM:当用户移动滚动条到它的范围的最末端时触发(底边或右边,依赖于方向)。

EVT_SCROLL_ENDSCROLL:在微软的Windows中,任何滚动会话的结束都将触发该事件,不管是因鼠标拖动或按键按下。

EVT_SCROLL_LINEDOWN:当用户向下滚动一行时触发。

EVT_SCROLL_LINEUP:当用户向上滚动一行时触发。

EVT_SCROLL_PAGEDOWN:当用户向下滚动一页时触发。

EVT_SCROLL_PAGEUP:当用户向上滚动一页时触发。

EVT_SCROLL_THUMBRELEASE :用户使用鼠标拖动滚动条滚动不超过一页的范围,并释放鼠标后,触发该事件。

EVT_SCROLL_THUMBTRACK:滚动条在一页内被拖动时不断的触发。

EVT_SCROLL_TOP:当用户移动滚动条到它的范围的最始端时触发,可能是顶端或左边,依赖于方向而定。

class drawtmp(wx.ScrolledWindow):
    def __init__(self,parent):
        wx.ScrolledWindow.__init__(self, parent,style= wx.HSCROLL)
        self.SetScrollbars(1, 1, 1600, 1400)
        self.FitInside()
        self.Scroll(10, 10)
        self.Bind(wx.EVT_SCROLL,self.OnScroll)

    def OnScroll(self,evt):
        print "on scrolling"

windows环境下,上面的这几个事件全都试过了,鼠标拖拉,滚轴,一点都没激发的意思,难道是方法错了?



_______________________________________________
python-chinese
Post: send [hidden email]
Subscribe: send subscribe to [hidden email]
Unsubscribe: send unsubscribe to  [hidden email]
Detail Info: <a onclick="return top.js.OpenExtLink(window,event,this)" href="http://python.cn/mailman/listinfo/python-chinese" target="_blank"> http://python.cn/mailman/listinfo/python-chinese


_______________________________________________
python-chinese
Post: send [hidden email]
Subscribe: send subscribe to [hidden email]
Unsubscribe: send unsubscribe to  [hidden email]
Detail Info: http://python.cn/mailman/listinfo/python-chinese
Reply | Threaded
Open this post in threaded view
|

Re: wx.ScrolledWindow的scroll事件如何才能激发?

MaLi-3
EVT_SCROLLWIN 这个用下来不行,不知为啥,还是需要对scrollwin的各个事件进行单独处理,
下面是刚折腾出来的1个示例,可以对图片进行scroll,用到的相关事件是:
EVT_SCROLLWIN_THUMBRELEASE
EVT_SCROLLWIN_THUMBTRACK
EVT_SCROLLWIN_PAGEDOWN
EVT_SCROLLWIN_PAGEUP

#########################################################################
# -*- encoding: utf-8 -*-
import wx
 
class drawtmp(wx.ScrolledWindow):
    def __init__(self,parent):
        wx.ScrolledWindow.__init__(self, parent,style=wx.HSCROLL+wx.VSCROLL)
        self.SetScrollbars(1, 1, 1600, 1400)
        self.FitInside()
        img = wx.Image('d:\IMG_2899.JPG',type=wx.BITMAP_TYPE_ANY )
        self.photo = img.ConvertToBitmap()
       
        #绘图相对坐标
        self.posx = 0
        self.posy = 0
       
        self.InitBuffer()
       
        self.Bind(wx.EVT_PAINT,self.Onpaint )
        self.Bind(wx.EVT_SIZE,self.OnSize)
        self.Bind(wx.EVT_SCROLLWIN_THUMBRELEASE,self.scrollrelease)
        self.Bind(wx.EVT_SCROLLWIN_THUMBTRACK, self.scrolldrag)      
        self.Bind(wx.EVT_SCROLLWIN_PAGEDOWN ,self.Scrolldown)
        self.Bind(wx.EVT_SCROLLWIN_PAGEUP,self.Scrollup)
        
    def OnSize(self,evt):
        self.InitBuffer()

    def Onpaint(self,evt):
        dc = wx.BufferedPaintDC(self, self.buffer)
    
    # 捕捉对scrollbar 进行拖曳的动作 
    def scrolldrag(self,evt):
        scrollpos = evt.GetOrientation()
        #判断在Horizon scroll,修改绘图起始x坐标
        if scrollpos == 4:  self.posx = evt.GetPosition ()
        #判断在Vertical scroll,修改绘图起始y坐标
        if scrollpos == 8:  self.posy = evt.GetPosition()
        self.InitBuffer()
    
    #捕捉拖曳scrollbar后释放动作  
    def scrollrelease(self,evt):
        scrollpos = evt.GetOrientation()
        #必须进行SetScrollPos,才能和EVT_SCROLLWIN_THUMBTRACK事件后坐标保持一致;
        #根据scroll方向分别设置
        if scrollpos == 4:  self.SetScrollPos(4,self.posx)
        if scrollpos == 8:  self.SetScrollPos (8,self.posy)
        self.SetScrollPos(self.posx,self.posy)
        self.InitBuffer()
 
    # 设置scroll的pageup动作,坐标值为减少
    def Scrollup(self,evt):
        scrollpos = evt.GetOrientation()
        if scrollpos == 4:  self.posx = self.posx - 50
        if scrollpos == 8:  self.posy = self.posy - 50
        self.Scroll(self.posx, self.posy)
        self.InitBuffer()
       
    # 设置scroll的pagedown动作,坐标值为增加   
    def Scrolldown(self,evt):
        scrollpos = evt.GetOrientation()
        if scrollpos == 4:  self.posx = self.posx + 50
        if scrollpos == 8:  self.posy = self.posy + 50
        self.Scroll(self.posx, self.posy)
        self.InitBuffer ()
       
    def InitBuffer(self):
        w,h = self.GetVirtualSize()
        self.buffer = wx.EmptyBitmap(w,h)
        #在这里采用 ClientDC ,而不是 WindowDC
        dc = wx.BufferedDC(wx.ClientDC(self),self.buffer )
        #在scrolledwindow下绘图推荐的配置,在此例中测试下好像无啥用处
        self.DoPrepareDC(dc)
        self.DrawGraph(dc,self.posx,self.posy)
   
    def DrawGraph(self,dc,posx,posy):
        brush = wx.Brush('sky blue')
        dc.SetBackground(brush)
        dc.Clear()
        #注意使用减坐标绘图,才能正确刷新窗口图片
        dc.DrawBitmap(self.photo,-posx,-posy,True)
        dc.DrawLine(10-posx,10-posy,100-posx,200-posy)
       

class SketchFrame(wx.Frame):
    def __init__(self, parent):
        wx.Frame.__init__(self, parent, -1, "Sketch Frame", size=(800,600))
        self.sketch = drawtmp(self)
        self.Show(1)

if __name__ == '__main__':
    app = wx.PySimpleApp()
    frame = SketchFrame(None)
    app.MainLoop()
   


在07-12-28,clfff. peter <[hidden email]> 写道:
试试 EVT_SCROLLWIN

在07-12-26,MaLi <[hidden email]> 写道:
表8.7 滚动条的事件

EVT_SCROLL:当任何滚动事件被触发时发生。

EVT_SCROLL_BOTTOM:当用户移动滚动条到它的范围的最末端时触发(底边或右边,依赖于方向)。

EVT_SCROLL_ENDSCROLL:在微软的Windows中,任何滚动会话的结束都将触发该事件,不管是因鼠标拖动或按键按下。

EVT_SCROLL_LINEDOWN:当用户向下滚动一行时触发。

EVT_SCROLL_LINEUP:当用户向上滚动一行时触发。

EVT_SCROLL_PAGEDOWN:当用户向下滚动一页时触发。

EVT_SCROLL_PAGEUP:当用户向上滚动一页时触发。

EVT_SCROLL_THUMBRELEASE :用户使用鼠标拖动滚动条滚动不超过一页的范围,并释放鼠标后,触发该事件。

EVT_SCROLL_THUMBTRACK:滚动条在一页内被拖动时不断的触发。

EVT_SCROLL_TOP:当用户移动滚动条到它的范围的最始端时触发,可能是顶端或左边,依赖于方向而定。

class drawtmp(wx.ScrolledWindow):
    def __init__(self,parent):
        wx.ScrolledWindow.__init__(self, parent,style= wx.HSCROLL)
        self.SetScrollbars(1, 1, 1600, 1400)
        self.FitInside()
        self.Scroll(10, 10)
        self.Bind(wx.EVT_SCROLL,self.OnScroll)

    def OnScroll(self,evt):
        print "on scrolling"

windows环境下,上面的这几个事件全都试过了,鼠标拖拉,滚轴,一点都没激发的意思,难道是方法错了?



_______________________________________________
python-chinese
Post: send [hidden email]
Subscribe: send subscribe to [hidden email]
Unsubscribe: send unsubscribe to  [hidden email]
Detail Info: <a href="http://python.cn/mailman/listinfo/python-chinese" target="_blank" onclick="return top.js.OpenExtLink(window,event,this)"> http://python.cn/mailman/listinfo/python-chinese


_______________________________________________
python-chinese
Post: send [hidden email]
Subscribe: send subscribe to [hidden email]
Unsubscribe: send unsubscribe to   [hidden email]
Detail Info: <a onclick="return top.js.OpenExtLink(window,event,this)" href="http://python.cn/mailman/listinfo/python-chinese" target="_blank"> http://python.cn/mailman/listinfo/python-chinese


_______________________________________________
python-chinese
Post: send [hidden email]
Subscribe: send subscribe to [hidden email]
Unsubscribe: send unsubscribe to  [hidden email]
Detail Info: http://python.cn/mailman/listinfo/python-chinese