代码之家  ›  专栏  ›  技术社区  ›  CarolusPl

如何将项目添加到wx.scrolledpanel?

  •  3
  • CarolusPl  · 技术社区  · 14 年前

    我想在层次结构中添加动态捕获的图像(一个接一个)。我想将它们添加到wx.scrolledpanel

    滚动面板定义-更新

        self.hbox = wx.BoxSizer(wx.HORIZONTAL)
        #self.sizer.Add(self.hbox)
        self.scroll = scrolled.ScrolledPanel(self, id = -1, pos = wx.DefaultPosition, size = (500, 400), style= wx.SUNKEN_BORDER , name = "Scroll")
        self.scroll.SetupScrolling(10,10,10,10)
        #self.scroll.SetSizer(self.hbox)
        self.sizer.Add(self.scroll)    
    
    
       #add to scroll
       images = wx.StaticBitmap(self, id=-1, pos=wx.DefaultPosition,
                                size=(200,150),
                                style= wx.SUNKEN_BORDER)
       images.SetBitmap(bmp)
       self.hbox.Add(images, 1, wx.BOTTOM | wx.EXPAND | wx.ALL, 3)
       self.scroll.SetSizer(self.hbox)
       self.scroll.SetAutoLayout(1)
       self.scroll.SetupScrolling()
       self.SetSizerAndFit(self.sizer)
       self.Refresh() 
       self.Layout() 
    
    • python 2.6,Windows 32位

    更新后-我明白了 scrollpanel 我在sizer中添加图像。但是sizer没有显示在滚动面板中。

    1 回复  |  直到 13 年前
        1
  •  1
  •   volting    14 年前

    这是一个粗糙但可以运行的例子,你想要什么,有一个小故障,它认为我还没有找到原因!(只需将名为“image.jpg”的缩略图大小JPG放在与脚本相同的目录中)

    import wx
    import  wx.lib.scrolledpanel as scrolled
    
    class ImageDlg(wx.Dialog):
        def __init__(self, parent, title):
            wx.Dialog.__init__(self, parent=parent,title=title, size=wx.DefaultSize)
    
            self.scrollPnl = scrolled.ScrolledPanel(self, -1, size=(200, 200), style = wx.TAB_TRAVERSAL|wx.SUNKEN_BORDER)
    
            self.addBtn = wx.Button(self, id=wx.ID_ADD)
            self.Bind(wx.EVT_BUTTON, self.on_add, self.addBtn)
    
            self.mainSizer = wx.BoxSizer(wx.VERTICAL)       
    
            self.scrollPnlSizer = wx.BoxSizer(wx.VERTICAL)       
            img = wx.Image("image.jpg", wx.BITMAP_TYPE_ANY)
            staticBitmap = wx.StaticBitmap(self.scrollPnl, wx.ID_ANY, wx.BitmapFromImage(img))
            self.scrollPnlSizer.Add(staticBitmap, 1, wx.EXPAND | wx.ALL, 3)
    
            self.mainSizer.Add(self.addBtn)
            self.mainSizer.Add(self.scrollPnl)
    
            self.SetSizerAndFit(self.mainSizer)
    
    
        def on_add(self, event):
            img = wx.Image("image.jpg", wx.BITMAP_TYPE_ANY)
            staticBitmap = wx.StaticBitmap(self.scrollPnl, wx.ID_ANY, wx.BitmapFromImage(img))
            self.scrollPnlSizer.Add(staticBitmap, 1, wx.EXPAND | wx.ALL, 3)
            self.scrollPnl.SetSizer(self.scrollPnlSizer)
            self.scrollPnl.SetAutoLayout(1)
            self.scrollPnl.SetupScrolling()  
    
            self.Refresh()
            self.Layout()
    
    class TestPanel(wx.Panel):     
        def __init__(self, parent):
            wx.Panel.__init__(self, parent=parent)
    
            openDlg_btn = wx.Button(self, label="Open Dialog")
            self.Bind(wx.EVT_BUTTON, self.onBtn)
    
            mainSizer = wx.BoxSizer(wx.HORIZONTAL)
            mainSizer.Add(openDlg_btn, 0, wx.ALL, 10)
            self.SetSizerAndFit(mainSizer)
            self.Centre()
    
        def onBtn(self, event):
            dlg = ImageDlg(self, title='Image Dialog')
            dlg.SetSize((300,300))
    
            dlg.CenterOnScreen()
            dlg.ShowModal()  
            dlg.Destroy()
    
    
    class TestFrame(wx.Frame):    
        def __init__(self, parent):
            wx.Frame.__init__(self, parent)
            TestPanel(self)
    
    
    if __name__ == "__main__":
    
        app = wx.PySimpleApp()
        frame = TestFrame(None)
        frame.Show()
        app.MainLoop()