2020年3月9日月曜日
wxpython 上のListCtrlの選択で下のNotebookのタブを選択する
/wxpython/お絵かき5/notebook11.py
1 # coding: UTF-8
2 #panelの複数表示及び下panelにNotebookを貼り付け
3 #ウィンドウの大きさが変わると同時にpanelの大きさが変わるようにし>
4 #ウィンドウの分割をSplitterWindowにする
5 #ボタンを押してNotebookのタブを切り替える
6
7 #@@@画像ボタン作成をクラス化
8 #@@@画像ボタンの数により自動的にNotebookのタブの数を作成
9 #@@@ボタンイベントもクラスに入れる
10 #@@@ボタン表示がウィンドウの大きさが変わってもすっきり表示される
11 #@@@ようにする
12 #@@@ 画像ボタンのかわりにListCtrを使う
13
14 #BitmapButtonをsizerでセットすると、ウィンドウの大きさが変わって>
15 #配置が変わらないため表示が柔軟でない。
16
17 import os
18 import glob
19 import wx
20
21 BtList = []
22 IdList = []
23
24 #p0の上にp1とnoteを配置する
25 class MyFrame(wx.Frame):
26 def __init__(self, parent):
27 size = (400, 300)
28 size = size
29 wx.Frame.__init__(self, parent, -1, size=size)
30 self.p0 = MySplitterWindow(self, size)
31 self.p0.SetBackgroundColour("yellow")
32 self.Show()
33
34 #frameの子ウィンドウ
35 class MySplitterWindow(wx.SplitterWindow):
36 def __init__(self, parent, size):
37 wx.SplitterWindow.__init__(self, parent, -1)
38
39 #以下設定でウィンドウの大きさにつれ子パネルの大きさが変わ
40 y = int(size[1] / 2)
41 p1 = wx.Panel(self)
42 p2 = wx.Panel(self)
43 p1.SetBackgroundColour("green")
44 p2.SetBackgroundColour("blue")
45 #引数yのところ0で半々にウィンドウの大きさを設定するのも>
46 #ない
47 self.SplitHorizontally(p1, p2, y)
48
49 #p1にボタンを配置
50 #make_bt = MakeBitmapButtons("draw", p1)
51 #sizerの上にListCtrlをおかないと表示ができない
52 ly1 = wx.BoxSizer(wx.VERTICAL)
53 make_bt = MyListCtrl("draw", p1)
54 ly1.Add(make_bt, 1, wx.EXPAND)
55 p1.SetSizer(ly1)
56 ##ボタンの数を得る
57 bt_n = make_bt.getButtonLen()
58
59 #p2にNotebookを配置
60 #sizerの上にnoteをおかないとnoteの表示がおかしくなる
61 ly2 = wx.BoxSizer(wx.VERTICAL)
62 note = MyNotebook(p2, bt_n)#2:ボタンの数
63 ly2.Add(note, 1, wx.EXPAND)
64 p2.SetSizer(ly2)
65
66 # #ボタンをnoteにセット、ボタンとnoteのタブを関連付ける
67 make_bt.setGazouToPnal_Bind(note)
68
69
70 #parentを親にしてMyNotebookを作成する
71 #bt_n(ボタンの数)だけタブを作成
72 class MyNotebook(wx.Notebook):
73 def __init__(self, parent, bt_n):
74 wx.Notebook.__init__(self, parent, -1)
75 self.parent = parent
76
77 #ボタンの数だけNotebookのタブを作成
78 for n in range(bt_n):
79 panl = wx.Panel(self, -1)
80 self.AddPage(panl, "Page_"+str(n))
81 # 固定テキスト1,2を パネル1,2に作成
82 wx.StaticText(panl, -1, "Text_"+str(n), pos=(20,20))
83
84 def select(self, select_index):
85 self.SetSelection(select_index)
86
87
88 #gazou_folderにある画像を全てListCtrlのアイテムにしてly(sizer)に>
89 #付けそれをpalにセットする。
90 #画像の種類はsyuruiで定義したものに限る
91 #gazou_folderに画像ファイル以外があってはならない
92 class MyListCtrl(wx.ListCtrl):
93 def __init__(self, gazou_folder, parent):
94 wx.ListCtrl.__init__(self, parent, -1, style=wx.LC_ICON)
95 self.gazou_folder= gazou_folder
96 self.bt_n = 0
97 self.fpath = "./" + self.gazou_folder + "/*."
98
99 #gazou_folderのファイルの数を得る
100 def getButtonLen(self):
101 self.fpath = "./" + self.gazou_folder + "/*."
102 fpath_all = self.fpath + "*"
103 files = glob.glob(fpath_all)
104 self.bt_n = len(files)
105 return self.bt_n
106
107 #画像ボタンをpal に貼り付け、
108 #ボタンとNotebookのタブ選択と関連 付ける
109 def setGazouToPnal_Bind(self, note):
110 self.note = note
111
112 #以下の設定で画像の大きさは32×32ピクセルでないとダメ
113 imageList = wx.ImageList(32, 32)
114 #前コードでは以下としたが面倒なのでやめる
115 #syurui= ["png", "jpg", "gif", "bmp", "jpeg"]
116 syurui= ["jpg"]
117
118 #gazou_folderにある全ての画像ファイルからそのListCtrlアイ
119 #例えば、現在のディレクトリに
120 #t_1.log, t_2.log, abc.log, test101.lst のファイルが存在>
121 #glob.glob('*.log') の実行により、['abc.log', 't_1.log',
122 #が返却されます。
123 for s in syurui:
124 fpath_all = self.fpath + s
125 files = glob.glob(fpath_all)
126 for f in files:
127 #ListCtrlを使うのにImageListを利用している
128 #imageList.AddIcon(wx.Icon(f, wx.BITMAP_TYPE_PNG)
129 imageList.AddIcon(wx.Icon(f, wx.BITMAP_TYPE_JPEG)
130
131 #ImageListを使えるようにしている?
132 self.AssignImageList(imageList, wx.IMAGE_LIST_NORMAL)
133
134 for i in range(self.bt_n):
135 #*InsertImageStringItem* ( index 、 label 、 imageIn
136 #ListCtrlにアイテムを追加 ImageListに見出し(label)も>
137 #けるようだ。今回はlabel表示やめる
138 self.InsertStringItem(i, '', i)
139 self.Bind(wx.EVT_LIST_ITEM_SELECTED, self.OnClik)
140
141 def OnClik(self, event):
142 # 選択したアイテムのインデックスを取得する
143 select_index = self.GetFirstSelected()
144 print "select_index"
145 print select_index
146 self.note.select(select_index)
147
148
149
150 #gazou_folderにある画像を全て画像ボタンにしてly(sizer)に貼り付け
151 #それをpalにセットする。
152 #画像の種類はsyuruiで定義したものに限る
153 #gazou_folderに画像ファイル以外があってはならない
154 class MakeBitmapButtons():
155 def __init__(self, gazou_folder, pal):
156 #self.FnList = []
157 self.gazou_folder= gazou_folder
158 self.pal = pal
159 self.bt_n = 0
160 self.fpath = "./" + self.gazou_folder + "/*."
161
162 #gazou_folderのファイルの数を得る
163 def getButtonLen(self):
164 self.fpath = "./" + self.gazou_folder + "/*."
165 fpath_all = self.fpath + "*"
166 files = glob.glob(fpath_all)
167 self.bt_n = len(files)
168 return self.bt_n
169
170 #画像ボタンをpal に貼り付け、
171 #ボタンとNotebookのタブ選択と関連 付ける
172 def setGazouToPnal_Bind(self, note):
173 #print fpath
174 syurui= ["png", "jpg", "gif", "bmp", "jpeg"]
175 ly = wx.GridSizer(4, 3)
176
177 #gazou_folderにある全ての画像ファイルからそのボタンを作成
178 #例えば、現在のディレクトリに
179 #t_1.log, t_2.log, abc.log, test101.lst のファイルが存在>
180 #glob.glob('*.log') の実行により、['abc.log', 't_1.log',
181 #が返却されます。
182 for s in syurui:
183 fpath_all = self.fpath + s
184 files = glob.glob(fpath_all)
185 for f in files:
186 #ファイルパスから拡張子を除いたファイル名を取得
187 base = os.path.basename(f)
188 fName = os.path.splitext(base)[0]
189 #print "draw fName",fName
190
191 image = wx.Image(f)
192 image.Rescale(25,55)
193 bm = image.ConvertToBitmap()
194 ID = wx.NewId()
195 bt = wx.BitmapButton(self.pal, ID, bm)
196 bt.Bind(wx.EVT_BUTTON, note.select)
197
198 ly.Add(bt, flag=wx.EXPAND|wx.ALL)
199 #ly.Add(bt, 1, flag=wx.LEFT)
200
201 BtList.append(bt)
202 IdList.append(ID)
203
204 self.pal.SetSizer(ly)
205
206
207 if __name__ == '__main__':
208 app = wx.App(False)
209 MyFrame(None)
210 app.MainLoop()
登録:
コメントの投稿 (Atom)
About
リンク
連絡フォーム
ブログ アーカイブ
-
▼
2020
(26)
-
▼
3月
(11)
- wxpython お絵かきプログラム ピッカーから前景色をえらんで線を描けるようにした。
- wxpython お絵かきソフトのたまご
- wxpython linuxのカラーピッカーは色編集ボタンがないので、色編集が出来るボタンを つく...
- wxpython 上のListCtrlの選択で下のNotebookのタブを選択する
- wxpython ボタンイベントによりNotebookタブ選択、 それらをクラス化する
- wxpython 複数のpanel を作成 ウィンドウの大きさがかわってもそれにつれてpanelの大...
- wxpython panelの複数表示及び下panelにNotebookを貼り付け ボタンを押してN...
- wxpython panelの複数表示及び下panelにNotebookを貼り付け
- wxpython マウスを筆にして絵を描く 親クラス作成
- wxPythonのwxFormBuilderを以下サイトを参考につかってみた。
- wxpython マウスを筆にして絵を描く
-
▼
3月
(11)
0 件のコメント:
コメントを投稿