3264428 ランダム
 HOME | DIARY | PROFILE 【フォローする】 【ログイン】

傀儡師の館.Python

傀儡師の館.Python

【毎日開催】
15記事にいいね!で1ポイント
10秒滞在
いいね! --/--
おめでとうございます!
ミッションを達成しました。
※「ポイントを獲得する」ボタンを押すと広告が表示されます。
x

PR

Recent Posts

Calendar

Keyword Search

▼キーワード検索

Category

Archives

2023.11
2023.10
2023.09
2023.08
2023.07

Freepage List

Profile

kugutsushi

kugutsushi

Free Space

設定されていません。
2010.10.13
XML
カテゴリ:Python
wPython.org の Getting Started をサカナに第十一弾。Getting started with wxPython でいうと、1 と 2 が終わって、3.Woking with Windows の 3.2 Sizer あたりの話題から。



Sizer を使ったレイアウトを配置



Frameの中に、wx.BoxSizer を使ってボタンを3つ、水平方向に並べてみる。


# -*- coding: utf-8 -*-
import wx

class MainWindow(wx.Frame):
def __init__(self, parent, title):
wx.Frame.__init__(self, parent, title=title, size=(200,-1))

# ボタンを作成
self.button_cupnudle = wx.Button(self, wx.ID_ANY, "カップヌードル")
self.button_bigmac = wx.Button(self, wx.ID_ANY, "ビッグマック")
self.button_gyudon = wx.Button(self, wx.ID_ANY, "牛丼")

# 水平方向に並べる BoxSizer を作成
self.sizer = wx.BoxSizer(wx.HORIZONTAL)

# ボタンを BoxSizer に追加
self.sizer.Add(self.button_cupnudle)
self.sizer.Add(self.button_bigmac)
self.sizer.Add(self.button_gyudon)

# レイアウトを行う
self.SetSizer(self.sizer)
self.SetAutoLayout(True)
self.sizer.Fit(self)

# Frame を表示する。
self.Show()

app = wx.App(False)
frame = MainWindow(None, "Sizer サンプル")
app.MainLoop()





ウィンドウサイズを広げると次のようになる。



self.sizer.Add(self.button_xxxx) でボタンをサイザーに追加に追加していき、SetSizer()でサイザーをセットし、SetAutoLayout()でレイアウトの自動化の指定を行い、Fit()でサイザーを Frame サイズにフィットさせる計算をする。そして Show() でフレーム表示。

sizer.Add するときには、オプションを指定することができる。self.sizer.Add(self.button_xxx, 0) のように指定した場合、 0は、リサイズをするかどうか。0 にするとリサイズせず、 0 より大きい値を設定するとリサイズする(指定がないときは 0 を指定したのと同じ)。

上記の例に変更して、1 を指定すると、サイズを広げたときに、次のようになる。



試しに、牛丼だけ 0、それ以外は 1 にして広げてみると次のようになる。ウィンドウを広げても、牛丼だけサイズが変わらない。カップヌードルとビッグマックはウィンドウの幅に合わせて広がる。



Size にさらにオプションを付けてみる。self.sizer.Add(self.button_xxx, 1, wx.EPAND)としたものが次の画像。ウィンドウのサイズにあわせて、縦横ともにボタンが広がるようになる。フレームを広げると、それに応じてボタンのサイズも大きくなる。BoxSizer が Frame にフィットするようにしているので、ボタンはフレームの中で隙間なく均等に広がる。



ここでまた、牛丼だけ、self.sizer.Add(self.button_xxx, 0, wx.EPAND) とすると次のようになる。ボタンサイズ自体は、フレームにフィットしているものの、牛丼の横幅は、最初のままでリサイズされない。



ちなみに、self.sizer = wx.BoxSizer(wx.HORIZONTAL) のところを、self.sizer = wx.BoxSizer(wx.VERTICAL) とすれば、縦方向に並ぶようになる。



wx.EPAND が指定されているところは、いろいろな値をとることができる。


割り当てられた横幅に対して、アイテムのをどちらの縁に合わせるかを指定する。
ALLは HORIZONTAL または、VERTICAL の指定方向だけで、wx.EXAND の場合は、
指定方向に関係なく全方位。
wx.TOP
wx.BOTTOM
wx.LEFT
wx.RIGHT
wx.ALL

アイテムをすべての方向に対してフィットさせる。
wx.EXPAND

縦横の比率を維持したまま、できるだけ大きいサイズでフィットさせる。
wx.SHAPED

自動的に最適値として計算された最小の大きさのまま固定。
wx.FIXED_MINSIZE

割り当てられたスペースの中での配置方法の指定。
wx.ALIGN_CENTER
wx.ALIGN_LEFT
wx.ALIGN_RIGHT
wx.ALIGN_TOP
wx.ALIGN_BOTTOM
wx.ALIGN_CENTER_VERTICAL
wx.ALIGN_CENTER_HORIZONTAL


複数のフラグを指定する場合は、wx.FIXED_MINSIZE|wx.ALIGN_CENTER のように「 | 」でフラグをつないでいく。

ちょっと極端な例だが、もし、次のように指定すれば、

self.sizer.Add(self.button_cupnudle, 1, wx.SHAPED|wx.ALIGN_TOP)
self.sizer.Add(self.button_bigmac, 0, wx.FIXED_MINSIZE|wx.ALIGN_CENTER_VERTICAL)
self.sizer.Add(self.button_gyudon, 0, wx.FIXED_MINSIZE|wx.ALIGN_BOTTOM)


こうなる。



BoxSizer をうまく使えば、ウィンドウサイズを変えたときでも柔軟に対応できそうな感じ。






無料アクセス解析







お気に入りの記事を「いいね!」で応援しよう

Last updated  2015.03.08 17:14:17
コメント(0) | コメントを書く



© Rakuten Group, Inc.