2011-01-05 2 views
0

Je ne sais pas pourquoi le code suivant ne fonctionne pas, s'il vous plaît, aidez-moi:Pourquoi ScrolledPanel dans wxpython ne fonctionne pas de cette façon?

import wx 
import wx.lib.scrolledpanel as scrolled 

class TaskFrame(wx.Frame): 
    def __init__(self): 
     wx.Frame.__init__(self, parent = None, id = -1, title="ScrolledPanel", size = (500, 600)) 
     MainPanel = wx.Panel(self) 
     NewPanel = scrolled.ScrolledPanel(parent = MainPanel, pos = (100, 100), size = (300, 200), id = -1, style = wx.TAB_TRAVERSAL|wx.SUNKEN_BORDER, name="panel") 

     self.Button = wx.Button(parent = NewPanel, id = -1, label="Log", pos=(500, 30), size=(50, 20)) 
     NewPanel.SetupScrolling() 


class TaskApp(wx.App): 
    def OnInit(self): 
     self.frame = TaskFrame() 
     self.frame.Show() 
     self.SetTopWindow(self.frame) 
     return True 

def main(): 
    App = TaskApp(redirect = False) 
    App.MainLoop() 

if __name__ == "__main__": 
    main() 

Le bouton Log doit être dans le newpanel et le newpanel devrait être en mesure de faire défiler, mais ce n'est pas, quelle est la problème?

Répondre

3

Essayez d'utiliser un calibreur. Vous devez placer un objet plus grand que le ScrolledPanel intérieur pour activer le défilement (pour autant que je sache), donc cela devrait faire ce que je pense que vous essayez de le faire:

class TaskFrame(wx.Frame): 
    def __init__(self): 
     wx.Frame.__init__(self, parent = None, id = -1, title="ScrolledPanel", size = (500, 600)) 
     MainPanel = wx.Panel(self) 
     NewPanel = scrolled.ScrolledPanel(parent = MainPanel, pos = (100, 100), size = (300, 200), id = -1, style = wx.TAB_TRAVERSAL|wx.SUNKEN_BORDER, name="panel") 

     PanelSizer = wx.BoxSizer() 
     InsidePanel = wx.Panel(NewPanel) 
     self.Button = wx.Button(parent=InsidePanel, id = -1, label="Log", pos=(500, 30), size=(50, 20)) 
     PanelSizer.Add(InsidePanel, proportion=1) 

     NewPanel.SetSizer(PanelSizer) 
     NewPanel.SetupScrolling() 
+0

en fait, je crois que vous devez utiliser un calibreur. Les docs disent: "On suppose que le ScrolledPanel aura un calibreur, car il est utilisé pour calculer la taille minimale virtuelle du panneau et etc." – Mark

+0

Merci beaucoup, les gars! – Shane

Questions connexes