wxPython - 左侧和右侧的布局项

时间:2017-12-03 15:44:29

标签: python python-2.7 layout wxpython

我希望这不是一个noobie问题,但我正在努力了解一个项目的WxPython。我需要在顶栏的左侧和右侧添加一个项目。

Diagram of what I am trying to achieve

我在下面包含了我正在使用的代码(我希望它不会太久)。

是否有可能实现我的设想?

我最感兴趣的是理解我出错的地方,我一直在网上搜索但找不到任何解决方案(特别是那些解释得当的人)。

import wx

class MyPanel(wx.Panel):
    def __init__(self, parent, clientSize):
        super(MyPanel, self).__init__(parent, id=wx.ID_ANY, size=clientSize)

class MainDialog(wx.Frame):
    def __init__(self):
        super(MainDialog, self).__init__(None, title = 'Test name',
        size = (1024, 768), style = wx.CAPTION | wx.SYSTEM_MENU | wx.RESIZE_BORDER)

        # Create the window client panel.
        clientSize = self.GetClientSize()
        self.__panel = MyPanel(self, self.GetClientSize())

        self.__CreateInterface()

        self.SetMinSize((1024, 765))
        self.__panel.Layout()

    def __CreateInterface(self):

        self.__panelSizer = wx.BoxSizer(wx.VERTICAL)

        topBarSizer = wx.BoxSizer(wx.HORIZONTAL)

        img = wx.Image("avatar.png", wx.BITMAP_TYPE_ANY)
        sb1 = wx.StaticBitmap(self.__panel, -1, wx.BitmapFromImage(img))
        topBarSizer.Add(sb1, flag=wx.LEFT | wx.TOP | wx.ALIGN_LEFT, border=10)

        userDataSizer = wx.BoxSizer(wx.VERTICAL)

        labelCtl = wx.StaticText(self.__panel,
            label='USER INFO:', style=wx.ALIGN_RIGHT, size=(350, -1))
        userDataSizer.Add(labelCtl,
            flag = wx.LEFT | wx.RIGHT | wx.TOP | wx.ALIGN_RIGHT, border = 8)

        l1 = wx.StaticText(self.__panel, label = 'Glitter Gem',
        style=wx.ALIGN_RIGHT, size = (350, -1))
        userDataSizer.Add(l1, flag = wx.LEFT | wx.RIGHT | wx.ALIGN_RIGHT,
            border = 8)

        topBarSizer.Add(userDataSizer, flag = wx.ALIGN_RIGHT|wx.EXPAND)

        self.__panelSizer.Add(topBarSizer, 0, wx.EXPAND, border = 8)
        self.__panel.SetSizer(self.__panelSizer)


class TestApp(wx.App):

    def OnInit(self):
        mainDialog = MainDialog()
        mainDialog.Show(True)
        return True

app = TestApp()
app.MainLoop()

1 个答案:

答案 0 :(得分:0)

欢迎使用Stackoverflow,

Sizer可能非常复杂,为了解决您的问题,您可以添加拉伸垫片:

    topBarSizer.AddStretchSpacer();

我强烈建议您阅读Zetcode布局指南,因为它已多次帮助我。