Seite 1 von 1

Scroll Event Ende abfragen

Verfasst: Sonntag 15. April 2007, 13:45
von Piet Lotus
Hallo,
ich möchte gerne mitbekommen, wann ein User das Scrollen eines Elementes beendet hat. Dazu habe ich den Quelltext einer ScrolledPanel-Python-Demo abgewandelt.
Hier mein modifizierter Quelltext:

Code: Alles auswählen

import  wx
import  wx.lib.scrolledpanel as scrolled

text = "one two buckle my shoe three four shut the door five six pick up sticks seven eight lay them straight nine ten big fat hen"

class TestPanel(scrolled.ScrolledPanel):
    def __init__(self,parent):
        scrolled.ScrolledPanel.__init__(self,parent,-1)

        vbox = wx.BoxSizer(wx.VERTICAL)

        words = text.split()

        panel1 = scrolled.ScrolledPanel(self, -1, size=(140, 300),
                                 style = wx.TAB_TRAVERSAL|wx.SUNKEN_BORDER, name="panel1" )
        fgs1 = wx.FlexGridSizer(cols=2, vgap=4, hgap=4)

        for word in words:
            label = wx.StaticText(panel1, -1, word+":")

            tc = wx.TextCtrl(panel1, -1, word, size=(50,-1))

            fgs1.Add(label, flag=wx.ALIGN_RIGHT | wx.ALIGN_CENTER_VERTICAL | wx.LEFT, border=10)
            fgs1.Add(tc, flag=wx.RIGHT, border=10)

        panel1.SetSizer( fgs1 )
        panel1.SetAutoLayout(1)
        panel1.SetupScrolling()

        hbox = wx.BoxSizer(wx.HORIZONTAL)
        hbox.Add(panel1, 0, wx.FIXED_MINSIZE)
        
        vbox.Add(hbox, 0)
        self.SetSizer(vbox)
        self.SetAutoLayout(1)
        self.SetupScrolling()
        
        #hier verschiedene Alternativen
        self.Bind(wx.EVT_SCROLL_THUMBRELEASE,self.scrollenBeendent,panel1)
        self.Bind(wx.EVT_SCROLL_THUMBRELEASE,self.scrollenBeendent)
        panel1.Bind(wx.EVT_SCROLL_THUMBRELEASE,self.scrollenBeendent)

        #Alternativ wx.EVT_SCROLL_CHANGED geht auch nicht
        #self.Bind(wx.EVT_SCROLL_CHANGED,self.scrollenBeendent,panel1)
        #self.Bind(wx.EVT_SCROLL_CHANGED,self.scrollenBeendent)
        #panel1.Bind(wx.EVT_SCROLL_CHANGED,self.scrollenBeendent)
        
    def scrollenBeendent(self,event):
        print "Es wurde gescrollt"

def runTest(frame):
    win = TestPanel(frame)
    return win

class MyFrame(wx.Frame): 
    def __init__(self, parent, id, title): 
        wx.Frame.__init__(self, parent, id, title, wx.DefaultPosition, wx.DefaultSize, wx.DEFAULT_DIALOG_STYLE | wx.MAXIMIZE_BOX | wx.THICK_FRAME | wx.RESIZE_BORDER) 
        runTest (self) 
        
class DrApp(wx.App): 
    def OnInit(self):         
        frame = MyFrame(None, 101, "Test Event Scrollenbeendet abfangen")    
        frame.Show(True) 
        self.SetTopWindow(frame) 
        return True     
    
if __name__ == '__main__': 
    app = DrApp(0) 
    app.MainLoop() 
Warum wird das Event "evt_scroll_changed" oder oder "evt_scroll_thumbreleased" nicht gefangen? Kann mir jemand helfen? Wie bekomme ich mit, dass gescrollt worden ist? Ich arbeite auf einem SuSE10.2 System.
Vielen Dank schon mal im voraus,
Piet

Verfasst: Freitag 20. April 2007, 08:48
von Piet Lotus
Hallo,
ich habe mein Problem in der Zwischenzeit nach einigem Probieren gelöst.
Mit

Code: Alles auswählen

self.panel1.Bind(wx.EVT_SCROLLWIN_THUMBRELEASE,self.scrollenBeendent)
anstelle von wx.EVT_SCROLL_CHANGED oder wx.EVT_SCROLL_THUMBRELEASE gehts. :D

Danke an alle, die in der Zwischenzeit versucht haben mir eventuell zu helfen.
Gruß
Piet