2020年3月8日日曜日
wxpython ボタンイベントによりNotebookタブ選択、 それらをクラス化する
画像ボタン作成用画像フォルダの画像ファイルの数だけ 画像ボタンを作成のクラス
画像ボタンの数だけNotebookのタブを作成、 ボタンとタブ選別のイベントのクラス
上クラス作成した。
wxpython/お絵かき5/notebook10.py
1 # coding: UTF-8
2 #panelの複数表示及び下panelにNotebookを貼り付け
3 #ウィンドウの大きさが変わると同時にpanelの大きさが変わるようにし>
4 #ウィンドウの分割をSplitterWindowにする
5 #ボタンを押してNotebookのタブを切り替える
6
7 #@@@画像ボタン作成をクラス化
8 #@@@画像ボタンの数により自動的にNotebookのタブの数を作成
9 #@@@ボタンイベントもクラスに入れる
10 #@@@ボタン表示がウィンドウの大きさが変わってもすっきり表示される
11 #@@@ようにする
12
13
14 import os
15 import glob
16 import wx
17
18
19 BtList = []
20 IdList = []
21
22 #p0の上にp1とnoteを配置する
23 class MyFrame(wx.Frame):
24 def __init__(self, parent):
25 size = (400, 300)
26 size = size
27 wx.Frame.__init__(self, parent, -1, size=size)
28 self.p0 = MySplitterWindow(self, size)
29 self.p0.SetBackgroundColour("yellow")
30 self.Show()
31
32 #frameの子ウィンドウ
33 class MySplitterWindow(wx.SplitterWindow):
34 def __init__(self, parent, size):
35 wx.SplitterWindow.__init__(self, parent, -1)
36
37 #以下設定でウィンドウの大きさにつれ子パネルの大きさが変わ
38 y = int(size[1] / 2)
39 p1 = wx.Panel(self)
40 p2 = wx.Panel(self)
41 p1.SetBackgroundColour("green")
42 p2.SetBackgroundColour("blue")
43 #引数yのところ0で半々にウィンドウの大きさを設定するのも>
44 #ない
45 self.SplitHorizontally(p1, p2, y)
46
47 #p1にボタンを配置
48 make_bt = MakeBitmapButtons("draw", p1)
49 ##ボタンの数を得る
50 bt_n = make_bt.getButtonLen()
51
52 #p2にNotebookを配置
53 #sizerの上にnoteをおかないとnoteの表示がおかしくなる
54 ly2 = wx.BoxSizer(wx.VERTICAL)
55 note = MyNotebook(p2, bt_n)#2:ボタンの数
56 ly2.Add(note, 1, wx.EXPAND)
57 p2.SetSizer(ly2)
58
59 #ボタンをnoteにセット、ボタンとnoteのタブを関連付ける
60 make_bt.setGazouToPnal_Bind(note)
61
62
63 #parentを親にしてMyNotebookを作成する
64 #bt_n(ボタンの数)だけタブを作成
65 class MyNotebook(wx.Notebook):
66 def __init__(self, parent, bt_n):
67 wx.Notebook.__init__(self, parent, -1)
68 self.parent = parent
69
70 #ボタンの数だけNotebookのタブを作成
71 for n in range(bt_n):
72 panl = wx.Panel(self, -1)
73 self.AddPage(panl, "Page_"+str(n))
74 # 固定テキスト1,2を パネル1,2に作成
75 wx.StaticText(panl, -1, "Text_"+str(n), pos=(20,20))
76
77 #ボタンのイベントはselectで受けボタンの区別はidでしている
78 def select(self, event):
79 print "select"
80 #ボタンのidでイベントを決める事が出来る
81 for id in IdList:
82 print id
83 if event.Id == id:
84 print event.Id
85 n = IdList.index(id)
86 #Notebookのタブの選択
87 self.SetSelection(n)
88
89
90 #gazou_folderにある画像を全て画像ボタンにしてly(sizer)に貼り付け
91 #それをpalにセットする。
92 #画像の種類はsyuruiで定義したものに限る
93 #gazou_folderに画像ファイル以外があってはならない
94 class MakeBitmapButtons():
95 def __init__(self, gazou_folder, pal):
96 #self.FnList = []
97 self.gazou_folder= gazou_folder
98 self.pal = pal
99 self.bt_n = 0
100 self.fpath = "./" + self.gazou_folder + "/*."
101
102 #gazou_folderのファイルの数を得る
103 def getButtonLen(self):
104 self.fpath = "./" + self.gazou_folder + "/*."
105 fpath_all = self.fpath + "*"
106 files = glob.glob(fpath_all)
107 self.bt_n = len(files)
108 return self.bt_n
109
110 #画像ボタンをNotebook に貼り付け、
111 #ボタンとNotebookのタブ選択と関連 付ける
112 def setGazouToPnal_Bind(self, note):
113 #print fpath
114 syurui= ["png", "jpg", "gif", "bmp", "jpeg"]
115 ly = wx.GridSizer(4, 3)
116
117 #gazou_folderにある全ての画像ファイルからそのボタンを作成
118 #例えば、現在のディレクトリに
119 #t_1.log, t_2.log, abc.log, test101.lst のファイルが存在>
120 #glob.glob('*.log') の実行により、['abc.log', 't_1.log',
121 #が返却されます。
122 for s in syurui:
123 fpath_all = self.fpath + s
124 files = glob.glob(fpath_all)
125 for f in files:
126 #ファイルパスから拡張子を除いたファイル名を取得
127 base = os.path.basename(f)
128 fName = os.path.splitext(base)[0]
129 #print "draw fName",fName
130
131 image = wx.Image(f)
132 image.Rescale(25,55)
133 bm = image.ConvertToBitmap()
134 ID = wx.NewId()
135 bt = wx.BitmapButton(self.pal, ID, bm)
136 bt.Bind(wx.EVT_BUTTON, note.select)
137
138 ly.Add(bt, flag=wx.EXPAND|wx.ALL)
139 #ly.Add(bt, 1, flag=wx.LEFT)
140
141 BtList.append(bt)
142 IdList.append(ID)
143
144 self.pal.SetSizer(ly)
145
146
147 if __name__ == '__main__':
148 app = wx.App(False)
149 MyFrame(None)
150 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 件のコメント:
コメントを投稿