Sizer ... - wxPython

dps*_*swt 3 python wxpython boxsizer

好的,所以我正在学习wxPython中的sizer,我想知道是否有可能做类似的事情:

==============================================
|WINDOW TITLE                          _ [] X|
|============================================|
|xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx|
|xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx|
|xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx|
|xxxxxxxxxxxxxxxxxxNOTEBOOKxxxxxxxxxxxxxxxxxx|
|xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx|
|xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx|
|xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx|
|________                         ___________|
|IMAGE   |                       |LoginForm  |
|________|                       |___________|
==============================================
Run Code Online (Sandbox Code Playgroud)

注意:是的,我从wxPython中得到了这个- 选择正确的sizer在应用程序中使用

随着NOTEBOOK扩展到左侧和底部,IMAGE对齐左侧和底部,loginform对齐到右侧和底部,我设法做几乎所有,但现在我有一个问题..

问题是我不能单独对齐Loginform和Image(我使用Box Sizer),我想.

编辑:所以每个人都可以看到我的意思:"哦,我所指的是,基本上如果我更改了对齐,它会影响LoginForm和Image ..例如,如果我将对齐设置为RIGHT,则图像和由于以下原因,loginform已经与右边对齐:sizer.Add(sizer4,0,wx.ALIGN_RIGHT | wx.RIGHT,10).希望你们这次能理解"

这是我正在使用的代码,目前导致问题,任何帮助表示赞赏.注意:代码可能是(HUGELY)草率,因为我还在学习box sizer.下面是测试代码:

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()
Run Code Online (Sandbox Code Playgroud)

syn*_*nic 5

这样的事怎么样?

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)
Run Code Online (Sandbox Code Playgroud)

基本上,这bottom.Add((0, 0), 1, wx.EXPAND)将作为一个间隔,它将占用图像和登录表单之间的所有空间.我真的不明白你的意思"问题是我不能单独对齐Loginform和Image(我正在使用Box Sizer),我想".我大多只是按照插图来尝试创建布局.我希望这有帮助.

  • 而不是手动构建的spacer,你应该考虑使用`bottom.AddStretchSpacer()`. (4认同)