wx.BoxSizer佈局管理

創建wx.BoxSizer:

hbox = wx.BoxSizer(integer orient)
orient:(垂直方向)wx.VERTICAL 或(水平方向) wx.HORIZONTAL

hbox.Add(wx.Window window, integer proportion=0, integer flag = 0, integer border = 0)
window:需要添加到wx.BoxSizer的控件;

proportion:定義了控件在既定方向上所佔空間的比例,是相對的,相對於其他組件,比如:在水平sizer中有三個按鈕,porportion=0,表示保持本身大小;porportion=1,表示在水平方向上佔三分之一的空間;porportion=2,表示在水平方向上佔三分之二的空間。

flag:

flag參數定義了兩個主要的行爲:

第一個參數是窗口的邊框:這個參數決定了邊框的寬度,在此決定窗口某一側添加邊框的事件。

另一個參數決定了sizer事件的行爲,當sizer改變時,空間的分配。並且分配的多少依賴於特定種類的sizer被使用。

flag參數可以使用 '|'來產生組合的多個flags。

常用的flag參數:

wx.TOPwx.BOTTOMwx.LEFTwx.RIGHTwx.ALLwx.EXPAND如果想在sizer分配給當前控件的空間之內調整控件佈局可用下面參數來實現:wx.ALIGN_LEFT wx.ALIGN_RIGHTwx.ALIGN_TOPwx.ALIGN_BOTTOMwx.ALIGN_CENTER_VERTICALwx.ALIGN_CENTER_HORIZONTALwx.ALIGN_CENTER

border:調整控件的邊框的寬度,此參數一般和flag參數配合使用。

如:hbox.Add(button, porprotion=1, flag=wx.EXPAND | wx.ALL,border= 20)
flag=wx.EXPAND | wx.ALL,border=20---------這代表的是button這個組件將充分的利用空間,但是會從四周預留出來20px作爲border。所以如果說使用了wx.EXPAND標誌,而沒有設定border,那麼我們的組件將充分的利用分配的空間。

最後,有些情況下我們需要添加一些空白的區域到我們的應用當中,可以使用下面的代碼:

 vbox = wx.BoxSizer(wx.VERTICAL)
 vbox.Add((-1, 20))
vbox.Add((-1, 20))   # 添加了20個像素的空白空間
佈局分析:


上圖中佈局實現方法:
1、整體上控件佈局分上下兩個佈局,也就是我們需要創建一個垂直方向上的BoxSizer(v_box=wx.BoxSizer(wx.VERTICAL));
2、在分析上部分的控件的佈局,可以看出:靜態文本、輸入框、三個按鈕在同一水平方向上,由此我們需要創建一個水平方向上的BoxSizer佈局管理器(h_box=wx.BoxSizer(
wx.HORIZONTAL));
3、然後把h_box佈局器放到v_box佈局管理器;
4、最後再把wx.TextCtrl控件放入v_box佈局管理器。
小技巧:控件一定要按需要佈局的順序放入BoxSizer佈局器中。

完整實例:

#!/usr/bin/env python
# -*- encoding:utf-8 -*-

import wx

class MyApp(wx.App):

	def OnInit(self):
		frame = MyFrame(parent=None, id=-1, title='ExampleBoxSizer')
		frame.Show(True)
		return True

class MyFrame(wx.Frame):

	def __init__(self, parent, id, title):
		wx.Frame.__init__(self, parent, id, title, size=(778, 494),
		                  style=wx.DEFAULT_FRAME_STYLE | wx.RESIZE_BORDER | wx.MAXIMIZE_BOX)
		self.panel = wx.Panel(self, -1)

		h_box_sizer = wx.BoxSizer(wx.HORIZONTAL)

		self.file_path = wx.TextCtrl(self.panel, -1)
		self.open_button = wx.Button(self.panel, -1, label=u'打開')
		self.save_button = wx.Button(self.panel, -1, label= u'保存')

		h_box_sizer.Add(self.file_path, proportion=1, flag=wx.EXPAND | wx.ALL, border=5)
		h_box_sizer.Add(self.open_button, proportion=0, flag= wx.ALL, border=5)
		h_box_sizer.Add(self.save_button, proportion=0, flag= wx.ALL, border=5)

		self.edit_text = wx.TextCtrl(self.panel, style=wx.TE_MULTILINE|wx.TE_RICH2|wx.HSCROLL)

		v_box_sizer = wx.BoxSizer(wx.VERTICAL)
		v_box_sizer.Add(h_box_sizer, proportion=0, flag=wx.EXPAND)
		v_box_sizer.Add(self.edit_text, proportion=1, flag=wx.EXPAND, border=5)

		self.panel.SetSizer(v_box_sizer)

def main():
    app = MyApp()
    app.MainLoop()

if __name__ == '__main__':
	main()


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