2015-03-07 2 views
0

Мне нужно сделать прокрутку Panel. Я использовал GridBagSizerКак прокрутить панель с помощью GridBagSizer в wxPython

Код:

import wx 

class MyFrame(wx.Frame): 
    def __init__(self, parent, ID, title): 
     wx.Frame.__init__(self, parent, ID, title, wx.DefaultPosition, wx.Size(400, 300)) 

     self.InitUI() 
     self.Center() 
     self.Show() 


    def InitUI(self): 

     MPanel = wx.Panel(self) 
     GridBag = wx.GridBagSizer(2, 2) 


     CO = ["RED", "BLUE"] 

     for i in range(10): 

      X = wx.StaticText(MPanel, size=(50,50), style=wx.ALIGN_CENTER, label="") 
      X.SetBackgroundColour(CO[i%2]) 
      GridBag.Add(X, pos=(i+1, 1), flag=wx.EXPAND|wx.LEFT|wx.RIGHT, border=1) 

     GridBag.AddGrowableCol(1) 
     MPanel.SetSizerAndFit(GridBag) 

class MyApp(wx.App): 
    def OnInit(self): 
     self.fr = MyFrame(None, -1, "K") 
     self.fr.Show(True) 
     self.SetTopWindow(self.fr) 
     return True 


app = MyApp(0) 
app.MainLoop() 

Как я могу это сделать?

ответ

1

Попробуйте, если следующее решение поможет вам:

import wx 
import wx.lib.scrolledpanel as scrolled 
class MyPanel(scrolled.ScrolledPanel): 

    def __init__(self, parent): 
     scrolled.ScrolledPanel.__init__(self, parent, -1) 
     self.SetAutoLayout(1) 
     self.SetupScrolling() 

Теперь вместо того, чтобы использовать MPanel=wx.Panel(self), используйте `MPanel = MyPanel (Я) и остальную часть кода будет оставаться как есть.

Ниже приведен модифицированный код:

class MyFrame(wx.Frame): 
    def __init__(self, parent, ID, title): 
     wx.Frame.__init__(self, parent, ID, title, wx.DefaultPosition, wx.Size(400, 300)) 

     self.InitUI() 
     self.Center() 
     self.Show() 

    def InitUI(self): 

     MPanel = MyPanel(self) 
     GridBag = wx.GridBagSizer(2, 2) 

     CO = ["RED", "BLUE"] 

     for i in range(10): 
      X = wx.StaticText(MPanel, size=(50,50), style=wx.ALIGN_CENTER, label="") 
      X.SetBackgroundColour(CO[i%2]) 
      GridBag.Add(X, pos=(i+1, 1), flag=wx.EXPAND|wx.LEFT|wx.RIGHT, border=1) 

     GridBag.AddGrowableCol(1) 
     MPanel.SetSizerAndFit(GridBag) 

class MyApp(wx.App): 
    def OnInit(self): 
     self.fr = MyFrame(None, -1, "K") 
     self.fr.Show(True) 
     self.SetTopWindow(self.fr) 
     return True 

app = MyApp(0) 
app.MainLoop() 
+0

Когда я добавляю эту панель прокрутки в другую wx.Panel(), он не работает .. Это означает, что у меня есть две панели внутри панели, одна воля быть прокручиваемым, другой не будет – aerokite