施胶者…-wxPython

施胶者…-wxPython,python,wxpython,boxsizer,Python,Wxpython,Boxsizer,好的,我正在学习wxPython中的sizers,我想知道是否有可能执行以下操作: ============================================== |WINDOW TITLE _ [] X| |============================================| |xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx| |xxxxxxxxxxxxxxxxxxx

好的,我正在学习wxPython中的sizers,我想知道是否有可能执行以下操作:

==============================================
|WINDOW TITLE                          _ [] X|
|============================================|
|xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx|
|xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx|
|xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx|
|xxxxxxxxxxxxxxxxxxNOTEBOOKxxxxxxxxxxxxxxxxxx|
|xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx|
|xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx|
|xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx|
|________                         ___________|
|IMAGE   |                       |LoginForm  |
|________|                       |___________|
==============================================
注:是的,我确实是从

笔记本电脑从左到下展开,图像从左到下对齐,loginform从右到下对齐,我几乎做了所有事情,但现在我遇到了一个问题

问题是我不能单独对齐Loginform和Image(我使用的是框大小调整器),我想这样做

编辑:这样每个人都能明白我的意思: “哦,我指的是,基本上,如果我更改对齐方式,它会影响LoginForm和Image。例如,如果我将对齐方式设置为右侧,则Image和LoginForm都会向右对齐,因为:sizer.Add(sizer4,0,wx.align_RIGHT | wx.RIGHT,10)。希望你们这次能理解”

这是我目前正在使用的导致问题的代码,非常感谢您的帮助。 注意:代码可能(非常)草率,因为我还在学习盒子大小。 以下是测试代码:

import wx
class Sizerframe(wx.Frame):
    def __init__(self):
        wx.Frame.__init__(self, None, -1, 'sizertestframe',size=(790, 524))
        p = wx.Panel(self)
        nb = wx.Notebook(p, size = (750, 332))
        button = wx.Button(p, -1, "loginform1rest", size=(94,23))
        button1 = wx.Button(p, -1, "Login", size=(94,23))
        button2 = wx.Button(p, -1, "Cancel", size=(94,23))
        imagebutton = wx.Button(p, -1, "imagebutton", size=(94,23))



        sizer = wx.BoxSizer(wx.VERTICAL)
        sizer1 = wx.BoxSizer(wx.HORIZONTAL)
        sizer1.Add(nb,1, wx.EXPAND)
        sizer.Add(sizer1,1, wx.LEFT | wx.RIGHT | wx.EXPAND, 10)
        sizer.Add((-1, 25))
        sizer2 = wx.BoxSizer(wx.VERTICAL)
        sizer2.Add(button, 0)
        sizer3 = wx.BoxSizer(wx.HORIZONTAL)
        sizer3.Add(button1, 0)
        sizer3.Add(button2,0, wx.LEFT, 5)
        sizer2.Add(sizer3, 0)

        sizer4 = wx.BoxSizer(wx.HORIZONTAL)
        sizer4.Add(imagebutton, 1, wx.LEFT | wx.BOTTOM)
        sizer4.Add(sizer2,0, wx.RIGHT | wx.BOTTOM , 5)
        sizer.Add(sizer4,0, wx.ALIGN_RIGHT | wx.RIGHT, 10)
        p.SetSizer(sizer)

def main():
    app = wx.App()
    frame = Sizerframe()
    frame.Show()
    app.MainLoop()
if __name__ == '__main__':
    main()

像这样的怎么样

container = wx.BoxSizer(wx.VERTICAL)
container.Add(self.nb, 1, wx.EXPAND)

login = wx.BoxSizer(wx.VERTICAL)
login.Add(self.userLabel)
login.Add(self.userText)

# ... clip, rest of login form additions here

bottom = wx.BoxSizer(wx.HORIZONTAL)
bottom.Add(image)
bottom.Add((0, 0), 1, wx.EXPAND)
bottom.Add(login)

container.Add(bottom, 1, wx.EXPAND)

基本上,
bottom.Add((0,0),1,wx.EXPAND)
将充当一个分隔符,它将占用图像和登录表单之间的所有空间。我真的不明白你所说的“问题是我不能分别对齐Loginform和Image(我使用的是框大小调整器),我想这样做”是什么意思。我主要是按照图示创建布局。我希望这会有所帮助。

在这里加上标签,我总是发现在中创建代码框架然后将代码添加到项目中比在纯Python中反复试验更容易

wxGlade。学习它,生活它,热爱它。它并不完美,但比从头开始手工编码要好得多。谢谢你的建议,尽管我仍然想知道是否有可能解决我的问题:)。@Francisco–你能为一个最小但有效的示例发布完整的代码吗?请尽量简单,不要使用图像、登录框等,只使用按钮或面板。可能还有更好的例子,但我希望得到类似我在这里发布的内容:@Francisco Aleixo,输入一个我们可以运行和实验的小代码,然后很容易输入解决方案OK,但现在您的代码和图片不匹配,因为您添加了额外的按钮。如果它能达到你的目的,我建议删除额外的按钮,而不是将它们添加到图片中。目前,您的示例代码的大小码嵌套得相当深,因此很难猜出您的目的是什么。感谢您的回复,明天我会在睡觉时分析它,我还添加了一个测试代码,以防您想弄乱它,非常感谢您的回复,无需任何问题。您可以使用嵌套的BxsiZER进行不同的布局,而不是手工构建的间隔器,您应该考虑使用<代码> Buto.AddiaStudiSuffle()/<代码>。更改“<代码>容器”。添加(底部)<代码> > <代码>容器。添加(底部,1,扩展)< /代码> -抱歉。(底部,0,wx.展开)