wxPython各個佈局的簡單案例

一、絕對佈局

panel = wx.Panel(self.frame)

panel1 = wx.Panel(panel,pos=(0,0), size=(250, wx.EXPAND))  #設置寬度爲250,高度撐滿;並且起點爲之爲(0,0)
panel1.SetBackgroundColour("yellow")
panel2 = wx.Panel(panel,pos=(255,0), size=(wx.EXPAND, wx.EXPAND))  #設置寬度和高度都撐滿
panel2.SetBackgroundColour("green")

 運行結果如下(其他部分代碼省略,只給出了主題部分pannel的佈局代碼):

二、使用Sizer來進行佈局

Sizer佈局包含以下幾類佈局管理器:

參考地址:

https://docs.wxwidgets.org/stable/classwx_sizer.html

http://xoomer.virgilio.it/infinity77/wxPython/Widgets/wx.Sizer.html

BoxSizer,可設置水平或垂直佈局,當控件超出窗體後不會自動換行:

    def createPanel3(self):
        # 創建面板
        panel = wx.Panel(self.frame)

        vbox = wx.BoxSizer(wx.VERTICAL)   #設置水平方向佈局

        but1 = wx.Button(panel,wx.ID_ANY,"button1")
        but2 = wx.Button(panel, wx.ID_ANY, "button2")
        but3 = wx.Button(panel, wx.ID_ANY, "button3")
        but4 = wx.Button(panel, wx.ID_ANY, "button4")
        but5 = wx.Button(panel, wx.ID_ANY, "button5")
        but6 = wx.Button(panel, wx.ID_ANY, "button6")
        but7 = wx.Button(panel, wx.ID_ANY, "button7")
        but8 = wx.Button(panel, wx.ID_ANY, "button8")
        but9 = wx.Button(panel, wx.ID_ANY, "button9")
        but10 = wx.Button(panel, wx.ID_ANY, "button10")


        vbox.Add(but1)
        vbox.Add(but2,flag=wx.ALIGN_CENTER)  #設置相對於窗口居中對齊
        vbox.Add(but3)
        vbox.Add(but4)
        vbox.Add(but5)
        vbox.Add(but6)
        vbox.Add(but7)
        vbox.Add(but8)
        vbox.Add(but9)
        vbox.Add(but10)
        panel.SetSizer(vbox)

運行結果:

StaticBoxSizer,在BoxSizer外面加了一個靜態的邊框以及標籤,他可以獨立的存在也可以放到其他佈局管理器中進行嵌套:

        panel = wx.Panel(self.frame)

        vbox = wx.BoxSizer(wx.VERTICAL)
        Svbox = wx.StaticBoxSizer(wx.VERTICAL,panel,"StaticBoxSizer佈局")  # 設置水平方向佈局
        vbox.Add(Svbox)  #將StaticBoxSizer嵌套到BoxSizer中

        but1 = wx.Button(panel, wx.ID_ANY, "button1")
        but2 = wx.Button(panel, wx.ID_ANY, "button2")
        but3 = wx.Button(panel, wx.ID_ANY, "button3")
        but4 = wx.Button(panel, wx.ID_ANY, "button4")
        Svbox.Add(but1)
        Svbox.Add(but2)  # 設置相對於窗口居中對齊
        Svbox.Add(but3)
        Svbox.Add(but4)
        panel.SetSizer(vbox)

運行結果:

FlexGridSizer,網格佈局,特點是可以設置網格之間的顯示比例:

        panel = wx.Panel(self.frame)
        fgs = wx.FlexGridSizer(1, 2, 0, 5)  #設置爲1行,2列,列間距爲5

        panel1 = wx.Panel(panel, size=(0, wx.EXPAND))
        panel1.SetBackgroundColour("yellow")
        panel2 = wx.Panel(panel, size=(0, wx.EXPAND))
        panel2.SetBackgroundColour("green")

        fgs.Add(panel1, 0, wx.EXPAND)
        fgs.Add(panel2, 0, wx.EXPAND)
        fgs.AddGrowableCol(0, 1)     #指定第一列佔1/3的寬度
        fgs.AddGrowableCol(1, 2)     #指定第二列佔2/3的寬度
        panel.SetSizer(fgs)

運行結果:

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章