我正在使用wx.BoxSizers来对齐我(这里简化的)程序的元素。我需要蓝色panel1以4:3的宽高比进行整形,但是要扩展以填充框架,并且这样做我给它比例= 1。但是我希望文本直接位于panel1下面,但尽可能小(porportion = 0)
然而,当我设置它时,panel1向下扩展(即使它被塑造,据说),并且文本被推到窗口的底部。即使窗口调整大小,我希望文本“拥抱”panel1。我该如何解决?谢谢!
import wx
class myWindow(wx.Window):
def __init__(self, parent, size):
wx.Window.__init__(self, parent=parent, size=size)
self.SetBackgroundColour(wx.BLUE)
class MainWindow(wx.Frame):
def __init__(self, parent):
wx.Frame.__init__(self, parent=parent, size=(500,500) )
self.panel1 = myWindow(self, size=(400,300))
self.text = wx.StaticText(self, label="This is text.")
self.mainSizer = wx.BoxSizer(wx.VERTICAL)
self.mainSizer.Add(self.panel1, 1, wx.ALIGN_TOP |
wx.SHAPED | wx.EXPAND | wx.ALL, border=10)
self.mainSizer.Add(self.text, 0, wx.EXPAND |
wx.ALIGN_TOP | wx.LEFT, border=10)
self.SetSizer(self.mainSizer)
self.Show()
app = wx.App(False)
panel = MainWindow(None)
app.MainLoop()
答案 0 :(得分:1)
由于面板的形状,你无法完全理解它。当您将框架设置得太小时,会导致面板从文本中缩小。您可以使用其SetSizeHints方法设置Frame的最小大小,这可以防止该问题。接下来,您应该在文本后面添加一个spacer来帮助它与面板保持一致。我只是使用了一个简单的元组黑客。这是稍微不同的代码:
import wx
class myWindow(wx.Panel):
def __init__(self, parent, size):
wx.Panel.__init__(self, parent=parent, size=size)
self.SetBackgroundColour(wx.BLUE)
class MainWindow(wx.Frame):
def __init__(self, parent):
wx.Frame.__init__(self, parent=parent, size=(500,500) )
topPanel = wx.Panel(self)
self.panel1 = myWindow(topPanel, size=(400,300))
self.text = wx.StaticText(topPanel, label="This is text.")
self.mainSizer = wx.BoxSizer(wx.VERTICAL)
self.mainSizer.Add(self.panel1, 8, wx.ALIGN_TOP |
wx.SHAPED | wx.EXPAND | wx.ALL, border=10)
self.mainSizer.Add(self.text, 0,
wx.ALIGN_TOP | wx.LEFT | wx.BOTTOM, 10)
self.mainSizer.Add((1,1), 1, wx.EXPAND)
topPanel.SetSizer(self.mainSizer)
self.SetSizeHints(500, 500, 3500, 3500)
self.Show()
app = wx.App(False)
panel = MainWindow(None)
app.MainLoop()
请注意,我将wx.Window类替换为wx.Panel类,因为无论如何你都将它称为面板。我还在框架上放置了一个面板,因为它可以帮助应用程序跨平台的外观(并且它可以在小部件之间进行标记)。
答案 1 :(得分:1)
在将项添加到sizer时,您可能还想尝试使用wx.SHAPED标志。它旨在使sizer保持项目的宽高比,虽然它已经很久以来我自己使用它,我不知道它是否仍能正常工作。 ; - )