我MyPanel
的大小(1200,800)已嵌入到父项中MainPanel
(其大小可以随的大小而变化MainFrame
):
import wx
class MyPanel(wx.Panel): # panel embedded in the main panel
def __init__(self, parent):
wx.Panel.__init__(self, parent, -1, size=(1200,800))
sizer = wx.BoxSizer(wx.VERTICAL)
bmp = wx.BitmapFromImage(wx.Image('background.png', wx.BITMAP_TYPE_PNG))
myimg = wx.StaticBitmap(self, -1, bmp)
sizer.Add(myimg, 0, wx.SHAPED, 10)
class MainPanel(wx.Panel): # main panel embedded in the main frame
def __init__(self, parent):
wx.Panel.__init__(self, parent, -1)
self.mypanel = MyPanel(self)
class MainFrame(wx.Frame): # main frame window
def __init__(self, parent, title):
wx.Frame.__init__(self, parent, -1, title, size=(800,600))
self.panel = MainPanel(self)
self.Show()
app = wx.App(0)
frame = MainFrame(None, 'Test')
app.MainLoop()
如何自动缩放 MyPanel
以使其适合父级 MainPanel
,并保持其长宽比?
备注:我正在寻找与Windows标准照片查看器接近的行为:调整窗口大小时,图像将重新缩放以适合父窗口。
只需将我以前的答案应用于要保持宽高比的面板即可。尚不清楚您想要的确切行为的100%,但这应该可以使您足够接近。
import wx
class MyPanel(wx.Panel): # panel embedded in the main panel
def __init__(self, parent):
wx.Panel.__init__(self, parent, -1)
sizer = wx.BoxSizer(wx.VERTICAL)
txt = wx.StaticText(self, label="Missing Bitmap");
sizer.Add(txt, 0, wx.SHAPED, 10)
self.SetInitialSize((1200, 800))
self.BackgroundColour = wx.RED
self.Sizer = sizer
self.Bind(wx.EVT_SIZE, self.OnSize)
def OnSize(self, evt):
hsize = evt.Size[0] * 0.75 # Constrain max height to 75% of width
self.SetSizeHints(-1, hsize, maxH=hsize)
evt.Skip()
重要的是在这里,您需要在每次要求更改子面板窗口大小时调整子面板窗口上的大小提示,以告诉尺寸调整器限制对窗口几何形状的约束。
class MainPanel(wx.Panel): # main panel embedded in the main frame
def __init__(self, parent):
wx.Panel.__init__(self, parent, -1)
self.mypanel = MyPanel(self)
self.BackgroundColour = wx.BLACK
设置背景色以帮助显示父面板与其子面板(红色)之间的差异。
vsizer = wx.BoxSizer(wx.VERTICAL)
vsizer.AddStretchSpacer(0)
vsizer.Add(self.mypanel, 1, wx.SHAPED|wx.EXPAND|wx.ALIGN_CENTER)
vsizer.AddStretchSpacer(0)
hsizer = wx.BoxSizer(wx.HORIZONTAL)
hsizer.AddStretchSpacer(0)
hsizer.Add(vsizer, 1, wx.EXPAND|wx.ALIGN_CENTER)
hsizer.AddStretchSpacer(0)
self.Sizer = hsizer;
在MainPanel中,它使用两个带有拉伸间隔器的调整器,以在调整窗口大小时将子面板水平和垂直地推向中间。
class MainFrame(wx.Frame): # main frame window
def __init__(self, parent, title):
wx.Frame.__init__(self, parent, -1, title, size=(800,600))
self.panel = MainPanel(self)
self.Show()
app = wx.App(0)
frame = MainFrame(None, 'Test')
app.MainLoop()
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句