在wxPython中创建滚动窗口
我正在尝试制作一个可以在图片网格上滚动的滚动窗口,但滚动条没有出现。wxWidgets的文档上说:
设置wxScrolledWindow中的滚动条最简单、最新的方法就是让布局管理器来决定滚动区域。当你用wxWindow::SetSizer把一个内部布局管理器设置到wxScrolledWindow时,这种方式就是默认的。滚动区域会根据布局管理器的要求来设置大小,滚动条会根据需要和wxScrolledWindow::SetScrollRate设置的滚动增量来分配。
所以我尝试用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 个回答
2
在这个地方插入:
self.panel.SetScrollbars(1, 1, 1, 1)
在 self.panel = wx.ScrolledWindow(self,wx.ID_ANY)
之后。
如果你想了解 SetScrollBars
方法的更多信息,可以查看这个 wxwidgets 文档 页面。