Создание ScrolledWindow в wxPython

Я пытаюсь сделать ScrolledWindow, который может прокрутить по сетке изображений, но полоса прокрутки не появляется. в документации wxWidgets говорится:

Самый автоматический и новейший путь [для установки полос прокрутки в wxScrolledWindow] состоит в том, чтобы просто позволить классификаторам определить область прокрутки. Это - теперь значение по умолчанию при установке внутреннего классификатора в wxScrolledWindow с wxWindow:: SetSizer. Область прокрутки будет установлена на размер, который требует классификатор, и полосы прокрутки будут присвоены для каждой ориентации согласно потребности в них и инкременте прокрутки, установленном wxScrolledWindow:: SetScrollRate

Таким образом, я пытаюсь установить классификатор своего ScrolledWindow с GridSizer, но он не работает. Код:

import wx

class MyFrame(wx.Frame):

    def __init__(self, parent, id=-1,title="",pos=wx.DefaultPosition,
         size=wx.DefaultSize, style=wx.DEFAULT_FRAME_STYLE,
         name="frame"):

        wx.Frame.__init__(self,parent,id,title,pos,size,style,name)

        self.panel = wx.ScrolledWindow(self,wx.ID_ANY)

        menuBar = wx.MenuBar()
        menu1 = wx.Menu()
        m = menu1.Append(wx.NewId(), "&Blah", "Show Pictures")
        menuBar.Append(menu1,"&Blah")
        self.Bind(wx.EVT_MENU,self.OnInit,m)

        self.SetMenuBar(menuBar)

    def OnInit(self, event):

        sizer = wx.GridSizer(rows=7,cols=3)

        filenames = []
        for i in range(20):
            filenames.append("img"+str(i)+".png")
        for fn in filenames:
            img = wx.Image(fn,wx.BITMAP_TYPE_ANY)
            sizer.Add(wx.StaticBitmap(self.panel,wx.ID_ANY,wx.BitmapFromImage(img)))

        self.panel.SetSizer(sizer)

class MyApp(wx.App):

    def OnInit(self):

        self.frame = MyFrame(parent=None,title="Frame")
        self.frame.Show()
        self.SetTopWindow(self.frame)
        return True

if __name__ == "__main__":

    app = MyApp()
    app.MainLoop()
1
задан Johnny 2 August 2010 в 23:47
поделиться

1 ответ

Вставьте это

self.panel.SetScrollbars(1, 1, 1, 1)

после self.panel = wx.ScrolledWindow(self,wx.ID_ANY)

Если вам нужна информация о методе SetScrollBars, посмотрите эту wxwidgets documentation страницу

2
ответ дан 2 September 2019 в 22:30
поделиться
Другие вопросы по тегам:

Похожие вопросы: