Scroll Event Ende abfragen

Plattformunabhängige GUIs mit wxWidgets.
Antworten
Piet Lotus
User
Beiträge: 80
Registriert: Dienstag 14. November 2006, 10:40

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
Piet Lotus
User
Beiträge: 80
Registriert: Dienstag 14. November 2006, 10:40

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
Antworten