wxpython布局的實現方法

2022-09-26 19:15:17 字數 2657 閱讀 3668

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

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

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

我們可以將boxsizer理解為乙個容器或者乙個箱子,裡面的控制項要麼水平排列,要麼豎直排列。而且boxsizer之間也可以互相巢狀,從而實現一種非常靈活的布局方式。如圖所示:

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

第二步,將這三個boxsizer裝入乙個縱向的boxsizer中。

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

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

import wx

class 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為縱向

left程式設計客棧box = wx.boxsizer(wx.vertical)

leftbox.add(box1,1,mys程式設計客棧tyle,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 true

if __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)

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

fl程式設計客棧ags相對來說比較複雜,程式設計客棧常用的可選值大致有三類,分別是宣告邊界、宣告對齊和宣告填充。

add方法通過wx.top、wx.bottom、wx.left、wx.right、wx.all來宣告邊界。例如,如果選擇了wx.left,即說明左側的邊界寬度為border。

add通過wx.align_left、wx.align_right、wx.align_right、wx.align_top、wx.align_bottom、wx.align_center來宣告對齊方式,如果選擇wx.align_left,則表示左對齊。此外,對於居中而言,還支援水平或豎直的居中,欄位為wx.align_center_horizontal、wx.align_center_vertical。

wx.expand是乙個常用的值,表示裝載的控制項將填充所有的剩餘空間。一般來說,如果選了這個,那麼proportion的值就不能為0了。

至此,我們就已經有足夠的能力編寫出右側選項卡中的引數布局了,下面則考慮左側畫圖區的實現。

本文標題: wxpython布局的實現方法

本文位址:

wxpython實現按鈕切換介面的方法

coding utf 8 import wx class testframe wx.frame def init self wx.frame.init self,none,1,u 登陸 size 370,280 style wx.minimize box wx.system menu wx.capt...

方法物件wxPython方法物件

時間緊張,先記一筆,後續優化與完善。頂級視窗物件frame理管資料,制控並呈現給使用者 先看一段最簡略的碼代 import wxclass defoninit self frame wx.frame parent none,title kobe frame.show return true 面上的碼...

wxpython實現檔案拖拽

我想讓wx.grid裡面的單元格能夠支援檔案拖拽,實現起來挺簡單的,共分3步 1 建立乙個wx.filedroptarget子類的物件,並把要支援拖拽的控制項傳給它的建構函式,此處是grid 2 呼叫grid的setdroptarget函式,並將第1步建立的wx.filedroptarget子類物件...