参考サイト
レイアウト管理http://wxpython.at-ninja.jp/layout.html#sec-2
設定
親パネルに子パネルa, bを作成 aにボタンを設置、bに孫パネルを設置。孫パネルにひ孫パネルを設置。
動作
押すボタンよって、子パネルbのウィンドウが子パネル、孫パネル、ひ孫パネルと変わります。
注意点
親パネルに子パネルを乗せるには?①子パネルのparentを親パネルして作成します。
②wx.BoxSizer(wx.VERTICAL)を作成します。
③Addで上のサイザーに子パネルを追加します。
④このサイザーをSetSizerで、親パネルにセットします。
FlexGridSizerでは子パネルの配置がおかしくなりました。
全コード
E:\MyBackups\goolgedrive\myprg_main\python_my_prg\wxpython\dc\お絵かき5\sizerOnPanl.py# coding: UTF-8
import wx
class MyApp(wx.App):
def __init__(self):
#エラーが出たらファイルに書き出す
wx.App.__init__(self, redirect=True, filename="log.txt")
class Border(wx.Frame):
def __init__(self, parent, id, title):
wx.Frame.__init__(self, parent, id, title, size=(250,200))
#親パネル
pal_oya = wx.Panel(self, -1)
pal_oya.SetBackgroundColour(wx.Colour(255, 0, 0))
#子パネルpal_kaの設定
#グリッドサイザー上にトグルボタンをつけそれを 子パネルpal_ka
#につける。部品の親の設定に注意
pal_ka = wx.Panel(pal_oya, -1)
pal_ka.SetBackgroundColour(wx.Colour(0, 0, 255))
self.ID_1 = wx.NewId()
self.ID_2 = wx.NewId()
self.ID_3 = wx.NewId()
self.bt1 = wx.Button(pal_ka, self.ID_1, u"青", size=(35, 15))
self.bt2 = wx.Button(pal_ka, self.ID_2, u"黃", size=(35, 15))
self.bt3 = wx.Button(pal_ka, self.ID_3, u"黒", size=(35, 15))
self.bt1.Bind(wx.EVT_BUTTON, self.ClickBt)
self.bt2.Bind(wx.EVT_BUTTON, self.ClickBt)
self.bt3.Bind(wx.EVT_BUTTON, self.ClickBt)
gs1 = wx.GridSizer(1,3)
gs1.Add(self.bt1)
gs1.Add(self.bt2)
gs1.Add(self.bt3)
pal_ka.SetSizer(gs1)
#子パネルpal_kbの設定
#ボックスサイザー上に孫パネルpal_mをつけて、それを子パネルpal_kbに
#つける。部品の親の設定に注意
pal_kb = wx.Panel(pal_oya, -1)
pal_kb.SetBackgroundColour(wx.Colour(0, 0, 0))
pal_m = wx.Panel(pal_kb, -1)
pal_m.SetBackgroundColour(wx.Colour(0, 255, 0))
#1プロポーション 1以上だとウィンドウが多くなった時それに合わせて
#アイテムが大きくなる
#All 全方向に余白 EXPAND その領域いっぱいにアイテムが大きくなる
#20 余白の量
self.bs_kb = wx.BoxSizer(wx.VERTICAL)
self.bs_kb.Add(pal_m, 1, wx.EXPAND | wx.ALL, 5)
pal_kb.SetSizer(self.bs_kb)
#親パネルに子パネルa,bをつける
#panlはBoxSizerでないとうまく表示できない。
#fs1 = wx.FlexGridSizer(2,1)
#fs1.AddGrowableRow(1)
bs_oya = wx.BoxSizer(wx.VERTICAL)
bs_oya.Add(pal_ka, 1, wx.EXPAND | wx.ALL, 5)
bs_oya.Add(pal_kb, 1, wx.EXPAND | wx.ALL, 5)
pal_oya.SetSizer(bs_oya)
#孫パネルpal_mの設定
#ボックスサイザー上にひ孫パネルpal_hmをつけて、それを孫パネルpal_mに
#つける。部品の親の設定に注意
pal_hm = wx.Panel(pal_m, -1)
pal_hm.SetBackgroundColour(wx.Colour(0, 0, 255))
#1プロポーション 1以上だとウィンドウが多くなった時それに合わせて
#アイテムが大きくなる
#All 全方向に余白 EXPAND その領域いっぱいにアイテムが大きくなる
#20 余白の量
self.bs_m = wx.BoxSizer(wx.VERTICAL)
self.bs_m.Add(pal_hm, 1, wx.EXPAND | wx.ALL, 5)
pal_m.SetSizer(self.bs_m)
self.Centre()
self.Show(True)
def ClickBt(self, event):
if event.Id == self.ID_1:
#青
print "self.ID_1"
self.bs_kb.ShowItems(True)
self.bs_m.ShowItems(True)
if event.Id == self.ID_2:
#黃
self.bs_kb.ShowItems(True)
self.bs_m.ShowItems(False)
if event.Id == self.ID_3:
#黒
self.bs_kb.ShowItems(False)
self.bs_m.ShowItems(False)
app = MyApp()
Border(None, -1, 'border.py')
app.MainLoop()
0 件のコメント:
コメントを投稿