Edited at

wxPythonを使ってみる (4)

こんにちは.これからwxPythonを使ってみる(4)について始めたいと思います.

対象や動作環境などのはじめに必要な情報はwxPythonを使ってみる(1) と同じになります.

また,今回の内容は前の3回のの続きとなります.是非読んで見てください.


特徴

前回では,Sizerを使ったレイアウトのitem引数とproportion引数について学びました.今回もSizerを使ったレイアウトの続きを学んで行きたいと思います.

今回はBoxSizerのflag引数について学びましょう.

flagはアイテムの配置設定とボーダー設定を行う引数です.


中央寄せ

BoxSizerにおける中央寄せで使用する定数は,以下の3つとなります.

1. wx.ALIGN_CENTER(中央)

2. wx.ALIGN_CENTER_VERTICAL(縦方向おける中央)

3. wx.ALIGN_CENTER_HORIZONTAL(横方向おける中央)


window_display08.py

import wx

class CustomFrame(wx.Frame):
def __init__(self,title):
wx.Frame.__init__(self,None,-1,title,size=(400,400))

panel = wx.Panel(self)

layout = wx.BoxSizer(wx.VERTICAL)
layout.Add(wx.Button(panel,wx.ID_ANY,"B01"),flag=wx.ALIGN_CENTER)
layout.Add(wx.Button(panel,wx.ID_ANY,"B02"),flag=wx.ALIGN_CENTER_VERTICAL)
layout.Add(wx.Button(panel,wx.ID_ANY,"B03"),flag=wx.ALIGN_CENTER_HORIZONTAL)

panel.SetSizer(layout)
self.Show()

app = wx.App(False)
CustomFrame("BoxSizer")
app.MainLoop()


ソースコードwindow_display08.pyは,wx.VERTICALを使っているため,縦方向のBoxSizerは次の図の配置となります.

ここではwx.ALIGN_CENTERwx.ALIGN_CENTER_HORIZONTALが同じ配置となっています.

理由は,wx.ALIGN_CENTERの縦スペースがないため,wx.ALIGN_CENTER_HORIZONTALと同じ横方向の中央寄せてなります.

先程のソースコードwindow_display08.pyのlayout = wx.BoxSizer(wx.VERTICAL)の部分をlayout = wx.BoxSizer(wx.HORIZONTAL)を変更すると,縦方向から横方向のBoxSizerでは次のような配置となります.

今回は,wx.ALIGN_CENTERの横スペースがないため,wx.ALIGN_CENTER_VERTICALと同じ縦方向の中央寄せてなります.


上下左右寄せ

BoxSizerにおける上下左右寄せで使用する定数は,以下の4つとなります.

1. wx.ALIGN_TOP(上寄せ)

2. wx.ALIGN_BOTTOM(下寄せ)

3. wx.ALIGN_LEFT(左寄せ)

4. wx.ALIGN_RIGHT(右寄せ)


window_display09.py

import wx

class CustomFrame(wx.Frame):
def __init__(self,title):
wx.Frame.__init__(self,None,-1,title,size=(400,400))

panel = wx.Panel(self)

layout = wx.BoxSizer(wx.VERTICAL)
layout.Add(wx.Button(panel,wx.ID_ANY,"B01"),flag=wx.ALIGN_TOP)
layout.Add(wx.Button(panel,wx.ID_ANY,"B02"),flag=wx.ALIGN_BOTTOM)
layout.Add(wx.Button(panel,wx.ID_ANY,"B03"),flag=wx.ALIGN_LEFT)
layout.Add(wx.Button(panel,wx.ID_ANY,"B04"),flag=wx.ALIGN_RIGHT)

panel.SetSizer(layout)
self.Show()

app = wx.App(False)
CustomFrame("BoxSizer")
app.MainLoop()


ソースコードwindow_display09.pyは,wx.VERTICALを使っているため,縦方向のBoxSizerは次の図の配置となります.

それでは,上下左右寄せの4つ変化を見えてみよう.

1. wx.ALIGN_TOP:縦方向のスペースがないため,変化なし

2. wx.ALIGN_BOTTOM:横方向のスペースがないため,変化なし

3. wx.ALIGN_LEFT:デフォルトが左寄せのため,変化なし

4. wx.ALIGN_RIGHT:自身に割り当てられた領域の右端へアイテムが配置される

これの横方法のBoxSizerを省略します.ぜひ自分でやってみてください.


そのほか


  1. wx.EXPAND(領域をすべて使用する)

  2. wx.:SHAPED(アスペクト比を維持しつつ,可能な限り領域を使用)

それでは使い方を見てみよう.


window_display10.py

import wx

class CustomFrame(wx.Frame):
def __init__(self,title):
wx.Frame.__init__(self,None,-1,title,size=(400,400))

panel = wx.Panel(self)

layout = wx.BoxSizer(wx.VERTICAL)
layout.Add(wx.Button(panel,wx.ID_ANY,"B01"),flag=wx.EXPAND)
layout.Add(wx.Button(panel,wx.ID_ANY,"B02"),flag=wx.SHAPED)

panel.SetSizer(layout)
self.Show()

app = wx.App(False)
CustomFrame("BoxSizer")
app.MainLoop()



  1. wx.EXPAND:横方向のスペースを全て埋めるように領域を使用.

  2. wx.:SHAPED:BoxSizerでは縦横どちらかのスペースがないので,変化なし.

今回のwxPythonを使ってみる(4)は以上で終わります.

読んでいただいてありがとうございます.

また今度で会いましょ!



「wxpythonを使ってみる」目次