wxPython GridSizerでボタンを並べてダイアルパッドもどきを作る
wxPythonで電話のダイアルパッドもどきを作ってみる。
ダイアルパッドはwx.Panelを継承したDialPadクラスを作った。
ボタンを並べるのはwx.GridSizerで、ボタンをクリックしたときに親クラスにあるdisplayに表示する必要があったので、DialPadのインスタンスを作った親(parent)をself.parentに記憶しておくようにした。
#!/usr/bin/env python
#coding:utf-8
import wx
class DialPad(wx.Panel):
def __init__(self,parent):
wx.Panel.__init__(self,parent)
self.parent=parent
self.button=[]
btnlabel=["1","2","3","4","5","6","7","8","9","*","0","#"]
for i in range(12):
labelstr = btnlabel[i]
self.button.append(wx.Button(self,-1,labelstr))
sz=wx.GridSizer(4,3)
for i in self.button:
sz.Add(i,1,wx.EXPAND)
self.SetSizer(sz)
self.Bind(wx.EVT_BUTTON, self.DoSomething)
def DoSomething(self,event):
btn=event.GetEventObject()
self.parent.display.AppendText(btn.GetLabel())
class MyWindow(wx.Frame):
def __init__(self,parent,id):
wx.Frame.__init__(self,parent,id,"MyTitle",size=(300,200))
dp=DialPad(self)
self.display=wx.TextCtrl(self,-1)
self.display.SetBackgroundColour("white")
sz=wx.BoxSizer(wx.VERTICAL)
sz.Add(self.display,0,wx.EXPAND)
sz.Add(dp,1,wx.EXPAND)
self.SetSizer(sz)
if __name__=='__main__':
app=wx.PySimpleApp()
frame=MyWindow(parent=None,id=-1)
frame.Show()
app.MainLoop()

