wx.ScrolledWindow in wx.Notebook - Problem

Plattformunabhängige GUIs mit wxWidgets.
Antworten
mathi
User
Beiträge: 314
Registriert: Dienstag 27. November 2007, 14:30

Hallo,

ich wußte nicht wie ich die Überschrift treffender formulieren sollte, folgendes Problem:

wenn ich ein normales Panel so erzeuge:

Code: Alles auswählen

class LeftPanel(wx.ScrolledWindow): 
    
    def __init__(self, parent): 
        wx.ScrolledWindow.__init__(self, parent,style=wx.TAB_TRAVERSAL | wx.BORDER_RAISED 
                        | wx.CLIP_CHILDREN
                        | wx.FULL_REPAINT_ON_RESIZE
                        )  
        self.SetBackgroundColour(wx.Colour(240,240,240))
        self.Freeze()
        # ScrolledWindow einrichten
        self.FitInside()
        self.SetScrollbars(20, 20, 600, 600)
        # Bildaufbau wieder erlauben
        self.Thaw()
kann ich in den darin liegenden textctrl mit ENTER von einem Entry zum nächsten springen (der Reihe nach) so soll es sein,

wenn ich aber das Ganze in einem notebook versuche:

Code: Alles auswählen

class LeftNotebook(wx.Notebook):
    
    def __init__(self, parent): 
        wx.Notebook.__init__(self, parent,style=wx.TAB_TRAVERSAL | wx.BORDER_RAISED | wx.NB_MULTILINE)  
        self.SetBackgroundColour(wx.Colour(240,240,240))
        
        panel_0=wx.ScrolledWindow(self)
        self.AddPage(panel_0, "Panel0") 
        
        panel_1=wx.ScrolledWindow(self)
        self.AddPage(panel_1, "Panel1")
        
        panel_2=wx.ScrolledWindow(self)
        self.AddPage(panel_2, "Panel2")
        
        panel_3=wx.ScrolledWindow(self)
        self.AddPage(panel_3, "Panel3")        

        panellist=(panel_0,panel_1,panel_2,panel_3)
        for i in panellist:
            i.Freeze()
            # ScrolledWindow einrichten
            i.FitInside()
            i.SetScrollbars(20, 20, 10, 10)
            # Bildaufbau wieder erlauben
            i.Thaw()
kann ich nicht mehr springen, es bleibt immer das erste Entry aktiv. Ersetze ich aber alle wx.ScrolledWindow durch wwx.Panel wie z.B.:

Code: Alles auswählen

panel_3=wx.ScrolledWindow(self)
durch

Code: Alles auswählen

panel_3=wx.Panel(self)
funktioniert es prächtig....

Wie kann ich mit Scrollbars arbeiten und trotzdem über ENTER von einem Entry zum nächsten springen??

hier mal der gesamte Code mit notebook:

http://paste.pocoo.org/show/Lef5KYojHwrgyTNLYVnU/

Gruß Mathi

edit: Überschrift ist nun besser
mathi
User
Beiträge: 314
Registriert: Dienstag 27. November 2007, 14:30

jetzt habe ich versucht, mit

Code: Alles auswählen

class LeftNotebook(wx.Notebook):
    
    def __init__(self, parent): 
        wx.Notebook.__init__(self, parent,style=wx.TAB_TRAVERSAL | wx.BORDER_RAISED | wx.NB_MULTILINE)  
        self.SetBackgroundColour(wx.Colour(240,240,240))

        panel_0=wx.Panel(self)
        self.AddPage(panel_0, "Panel0") 
        panel_0.Freeze
        panel_0a = wx.ScrolledWindow(panel_0,-1,(0,0),size=(400,500))
        panel_0a.SetVirtualSize((300,800))
        panel_0a.SetScrollRate(10,10)
        panel_0.Thaw
erst ein panel zu erzeugen, darin ein ScrolledWindow und die Enrtys auf das panel gelegt, das Ergebnis ist aber nicht gut...
außerdem möchte ich keine fixen Größen anngeben, nur ein

Code: Alles auswählen

panel_0a.FitInside()
funktioniert nicht...
Dav1d
User
Beiträge: 1437
Registriert: Donnerstag 30. Juli 2009, 12:03
Kontaktdaten:

Eine dirkekte Lösung habe ich nicht,
du könntest aber für eine eigene Klasse erstellen die z.B. von wx.Panel, wx.ScrolledWindow erbt, diese deinen Wünschen anpassen

Code: Alles auswählen

class MyNotebookPage(wx.Panel):
    def __init__(self, parent, id):
        wx.Panel.__init__(self, parent, id)

        # Hier kommt mein Code!
einbinden mit:

Code: Alles auswählen

        page = MyNotebookpage(self.nb, -1) # nb = wx.NoteBook
        self.nb.AddPage(page, title)
Somit kannst du eine Lösung für alle Tabs einfach verwenden
the more they change the more they stay the same
Antworten