2019年1月23日水曜日

wxPython 押すボタンによってウィンドウ(パネル)を変えてみました。







参考サイト

レイアウト管理
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 件のコメント:

コメントを投稿

About

参加ユーザー

連絡フォーム

名前

メール *

メッセージ *

ブログ アーカイブ

ページ

Featured Posts