【发布时间】:2016-01-22 08:25:00
【问题描述】:
我想将图像放入 wxPanel 的中心,我正在考虑需要调整图像大小以适应 wxPanel。但我无法动态获取 wxPanel 的大小。这是一个测试代码。
#!/usr/bin/python
# wxboxsizer.py
import wx
class MyFrame(wx.Frame):
def __init__(self, parent, id, title):
wx.Frame.__init__(self, parent, id, title, (-1, -1), wx.Size(500, 500))
panel1 = wx.Panel(self, -1,style= wx.SIMPLE_BORDER)
panel2 = wx.Panel(self, -1,style= wx.SIMPLE_BORDER)
panel3 = wx.Panel(self, -1,style= wx.SIMPLE_BORDER)
box = wx.BoxSizer(wx.VERTICAL)
box.Add(panel1, 1,flag = wx.EXPAND|wx.ALL,border = 3 )
box.Add(panel2, 1,flag = wx.EXPAND|wx.ALL,border = 3 )
box.Add(panel3, 1,flag = wx.EXPAND |wx.ALL,border = 3)
self.SetSizer(box)
class MyApp(wx.App):
def OnInit(self):
frame = MyFrame(None, -1, 'wxboxsizer.py')
frame.Show(True)
return True
app = MyApp(0)
app.MainLoop()
这段代码可以让 3 个面板完美地贴合框架,但是如何动态获取面板的大小。 此外,如何将图像放入面板中,并让图像动态适合面板?
我的解决方案:我刚刚找到了一种在调整框架大小时获取面板大小的方法。
#!/usr/bin/python
# wxboxsizer.py
import wx,os
class MyFrame(wx.Frame):
def __init__(self, parent, id, title):
wx.Frame.__init__(self, parent, id, title, (-1, -1), wx.Size(500, 500))
self.panel1 = wx.Panel(self, -1,style= wx.SIMPLE_BORDER)
panel2 = wx.Panel(self, -1,style= wx.SIMPLE_BORDER)
panel3 = wx.Panel(self, -1,style= wx.SIMPLE_BORDER)
box = wx.BoxSizer(wx.VERTICAL)
box.Add(self.panel1, 1,flag = wx.EXPAND|wx.ALL,border = 3 )
box.Add(panel2, 1,flag = wx.EXPAND|wx.ALL,border = 3 )
box.Add(panel3, 1,flag = wx.EXPAND |wx.ALL,border = 3)
self.Bind(wx.EVT_SIZE, self.OnSize)
self.SetSizer(box)
def OnSize(self, event):
size = self.GetSize()
size2 = self.panel1.GetSize()
print size,size2
event.Skip()
class MyApp(wx.App):
def OnInit(self):
frame = MyFrame(None, -1, 'wxboxsizer.py')
frame.Show(True)
return True
app = MyApp(0)
app.MainLoop()
此代码可以在调整框架大小时显示面板的大小。
【问题讨论】:
-
如果面板没有调整大小,您可以在 OnSize 方法中调用 self.Layout() 和/或 self.Fit()。对于图像,您可以使用 wx.Image 来保存您的图像对象并将其放入 wx.StaticBitmap 并将其放置在面板上。