国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > Python > 正文

wxpython布局的實現方法

2024-09-09 19:02:18
字體:
來源:轉載
供稿:網友

我們目前已經學會了四個控件,也編出了幾個窗口實例,它們都有一個共同的特點,就是丑,主要原因是沒有進行合理地布局。

此前的布局方式簡單粗暴,即明確規定每個控件的大小和位置,從而使之固定。這種布局方式可稱之為絕對定位布局,缺點是控件尺寸固定,并不會隨著窗口的放縮而同步變化。而且所有的控件都處于同一層次中,邏輯混亂,難于修改。

一個比較初級但很直觀的想法是,我們可不可以按照比例來調整控件的布局?我等菜鳥所能想到的需求,彼等大佬自然早已解決,BoxSizer便是為此而生。

我們可以將BoxSizer理解為一個容器或者一個箱子,里面的控件要么水平排列,要么豎直排列。而且BoxSizer之間也可以互相嵌套,從而實現一種非常靈活的布局方式。如圖所示:

在上圖中,第一步,將按鈕0、1、2裝進一個BoxSizer;將3、4、5、6裝入第二個BoxSizer;再將7-11裝入第三個BoxSizer。這三個BoxSizer都是橫向的。

第二步,將這三個BoxSizer裝入一個縱向的BoxSizer中。

第三步,再將這個縱向的BoxSizer與按鈕12裝入主BoxSizer中。于是這個布局便完成了。

其代碼如下,為了表現清晰,所以并沒有寫得很精簡。

import wxclass testBox(wx.Frame):  def __init__(self,parent=None):    wx.Frame.__init__(self,parent=parent)    #生成12個按鈕    btns = [wx.Button(self,label=str(i)) for i in range(13)]    myStyle = wx.EXPAND|wx.ALL #設置裝填風格    #左側第一行的BoxSizer    box1 = wx.BoxSizer()    for i in range(3):      box1.Add(btns[i],1,myStyle,border=10)    #左側第二行的BoxSizer    box2 = wx.BoxSizer()    for i in range(3,7):      box2.Add(btns[i],1,myStyle,border=10)    #左側第三行的BoxSizer    box3 = wx.BoxSizer()    for i in range(7,12):      box3.Add(btns[i],1,myStyle,border=10)    #左側BoxSizer,wx.VERTICAL表示這個BoxSizer為縱向    leftBox = wx.BoxSizer(wx.VERTICAL)    leftBox.Add(box1,1,myStyle,border=10)    leftBox.Add(box2,1,myStyle,border=10)    leftBox.Add(box3,1,myStyle,border=10)    #總BoxSizer    mainBox = wx.BoxSizer()    mainBox.Add(leftBox,1,myStyle,border=10)    mainBox.Add(btns[12],1,myStyle,border=10)    #在框架中設置mainBox    self.SetSizer(mainBox)class MyApp(wx.App):  def OnInit(self):    self.SetAppName("testbox")    self.Frame = testBox()    self.Frame.Show()    return Trueif __name__ == "__main__":  test = MyApp()  test.MainLoop()

wx.BoxSizer控件除了self之外,只有一個初始化參數,即orient,默認為wx.HORIZONTAL,即橫向;如果輸入wx.VERTICAL,則為縱向。

wx.BoxSizer通過Add方法裝填控件,其常用的調用格式為:

Add (self, window, proportion=0, flag=0, border=0)
window為BoxSizer所裝填的控件 proportion聲明這個控件的尺寸是否隨著窗口的放縮而改變,如果改變的話其比例為多少 flag聲明裝填風格,如果想擁有多種風格,風格之間用"|"連接 border為邊界間隔

其中,proportion的參數為0時,表示尺寸不變;為正整數時,分別按照這個值的比例進行縮放。

Flags相對來說比較復雜,常用的可選值大致有三類,分別是聲明邊界、聲明對齊和聲明填充。

Add方法通過wx.TOP、wx.BOTTOM、wx.LEFT、wx.RIGHT、wx.ALL來聲明邊界。例如,如果選擇了wx.LEFT,即說明左側的邊界寬度為border。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 洱源县| 黔西县| 奇台县| 南阳市| 虎林市| 临泽县| 柯坪县| 江源县| 宣汉县| 怀柔区| 卓资县| 霍山县| 洪湖市| 永修县| 庄河市| 葫芦岛市| 扎鲁特旗| 台北县| 凤城市| 尚义县| 夏河县| 遂昌县| 济源市| 杭锦旗| 建瓯市| 边坝县| 宝山区| 收藏| 龙川县| 马山县| 久治县| 瓮安县| 万州区| 驻马店市| 陵川县| 岚皋县| 青岛市| 庆阳市| 腾冲县| 玛纳斯县| 襄樊市|