2020年2月27日木曜日

wxpython SplitterWindowにSplitterWindowをつける。




 coding: UTF-8

import wx
import wx.lib.scrolledpanel as scrolled
import glob
import os

class MyApp(wx.App):
    def __init__(self):
        #エラーが出たらファイルに書き出す
        wx.App.__init__(self, redirect=True, filename="log.txt")

class MyFrame(wx.Frame):
    ## *args 可変長タプル  **kwargs 可変長辞書
    def __init__(self, parent, *args ,**kargs):
        frame = wx.Frame.__init__(self, parent, *args, **kargs)
        #pal= wx.Panel(self)
        #pal.SetBackgroundColour("BLACK")
        #Layout(self, pal)
        Layout(self)

        self.Show()


#第1引数:全体の親フレーム 第2引数:右側に配置するパネル
class Layout():
    #def __init__(self, frame, pal):
    def __init__(self, frame):

        #spwの中にpalとspw2を入れ、spw2の中にpal21,pal22をいれる
        #pal22はスクロールウィンドウ
        #ウィンドウ分割のコンストラクタ
        #spw   ----------------------
        #  spw2 ++++++++++++++ | pal01
        #    pal21             |
        #    pal22             |
        #       +++++++++++++++|
        # ---------------------------
        spw  = wx.SplitterWindow(frame, wx.ID_ANY, style=wx.SP_3D)
        spw2 = wx.SplitterWindow(spw, wx.ID_ANY, style=wx.SP_3D)
        self.pal01 = wx.Panel(spw, wx.ID_ANY)
        self.pal21 = wx.Panel(spw2,wx.ID_ANY)
        self.pal22 = wx.Panel(spw2,wx.ID_ANY)

        #ly = wx.BoxSizer(wx.VERTICAL) 
        #ly.Add(pal, flag=wx.EXPAND)
        #self.pal01.SetSizer(ly)

        #分割ウィンドウを小さくした場合、なくなってしまうのを防ぐため
        #最小幅を設定する。
        spw.SetMinimumPaneSize(1)
        spw2.SetMinimumPaneSize(1)
        #ウィンドウを左右に分割 左のウィンドウの幅を90
        spw.SplitVertically(spw2, self.pal01, 90)
        spw2.SplitHorizontally(self.pal21, self.pal22, 300)

        self.pal21.SetBackgroundColour("BLACK")
        self.pal22.SetBackgroundColour("GOLD")

    #   #spw2.SetSplitMode(wx.SPLIT_HORIZONTAL)
    #   #0でウィンドウを半々にできるのだが、両方スクロールパネルではこ
    #   #の設定が効かないため、片方を通常パネルにする。

    def setPal(self, pal):
        ly = wx.BoxSizer(wx.VERTICAL)
        ly.Add(pal, flag=wx.EXPAND)
        self.pal01.SetSizer(ly)



    def getWindow(self):
        return self.pal, self.pal21, self.pal22

if __name__ == '__main__':
    #app = MyApp()
    app = wx.App(False)
    MyFrame(None, -1, "Test ", size=(800, 600))
    app.MainLoop()
~                                  

0 件のコメント:

コメントを投稿

About

参加ユーザー

連絡フォーム

名前

メール *

メッセージ *

ページ

Featured Posts