首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >wx.BoxSizer项目未正确对齐

wx.BoxSizer项目未正确对齐
EN

Stack Overflow用户
提问于 2013-01-16 12:59:07
回答 2查看 131关注 0票数 2

我正在使用wx.BoxSizers来对齐我(这里是简化的)程序的元素。我需要蓝色panel1的形状为4:3的宽高比,但扩大以填充框架,并为此我给它proportion=1。然而,我希望文本坐在panel1的正下方,但尽可能小(porportion=0)

然而,当我设置它时,panel1会向下展开(尽管它应该是整形的),并且文本被推到窗口的底部。我希望文本“拥抱”panel1,即使窗口调整大小也是如此。我该如何解决这个问题?谢谢!

代码语言:javascript
复制
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()
EN

回答 2

Stack Overflow用户

发布于 2013-01-17 00:07:22

你不能准确地得到它,因为你的面板的形状是这样的。当您将框架设置得太小时,会导致面板从文本中收缩。不过,您可以使用其SetSizeHints方法设置框架的最小大小,这将防止该问题。下一步,您应该在文本后面添加一个间隔符,以帮助使其与面板保持一致。我只是使用了一个简单的元组hack来实现这一点。下面是稍微不同的代码:

代码语言:javascript
复制
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
EN

Stack Overflow用户

发布于 2013-01-17 03:09:01

在将项目添加到sizer时,您可能还希望尝试使用wx.SHAPED标志。它的目的是使sizer保持项目的纵横比,尽管我已经很长时间没有使用它了,我不知道它是否仍然正常工作。;-)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14351658

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档