こんにちは!最近は暑い日が続き頭もボーとなりやすいこの頃です。
久しぶりの投稿となりました!
今回はPythonでもいつもと違い機械学習ではなくwxPythonの使用方法について書いていきます
【動作環境】
・Windows10
・Python3.6.5(Anaconda)
・PyCharm 2018.1
【導入方法】
pip install wxPython
以上!!簡単です!!
【ウインドウ作成方法】
1 2 3 4 5 6 7 |
import wx app = wx.PySimpleApp() frame = wx.Frame(None, -1, "Hello wxPython") frame.SetSizeWH(300, 200) frame.Show(True) app.MainLoop() |
これで基本的なウィンドウを表示させることができる。wx.Frameの第3引数の"Hello wxPython"を変更させればタイトルを変更させることができる
【基本的なパーツ】
サンプルとして
・テキストボックス
・チェックボックス
・コンボボックス
を使ったソースを紹介します
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
import wx element_array = ('element_1', 'element_2', 'element_4', 'element_3', 'element_5') app = wx.PySimpleApp() frame = wx.Frame(None, -1, "Hello wxPython") frame.SetTitle('テキストボックス') panel_ui = wx.Panel(frame, -1, pos=(50, 50), size=(300, 200)) frame.label = wx.StaticText(panel_ui, -1, '', pos=(10, 10)) frame.box = wx.TextCtrl(panel_ui, -1, pos=(10, 50)) btn = wx.Button(panel_ui, -1, 'コピー', pos=(10, 150)) checkbox_1 = wx.CheckBox(panel_ui, wx.ID_ANY, 'チェックボックス1', pos=(10, 75)) combobox_1 = wx.ComboBox(panel_ui, wx.ID_ANY, '選択してください', choices=element_array, style=wx.CB_DROPDOWN, pos=(10, 90)) def Clicked(self): text = frame.box.GetValue() frame.box.Clear() text2 = "" if checkbox_1.GetValue() is True: text2 = "Yes" else: text2 = "No" text3 = "" text3 = element_array[combobox_1.GetSelection()] frame.label.SetLabel(text + " " + text2 + " " + combobox_1.GetStringSelection()) btn.Bind(wx.EVT_BUTTON, Clicked) frame.Show(True) app.SetTopWindow(frame) app.MainLoop() |
どれも簡単に使用できるのね
【タスクトレイに格納する方法】
最後にタスクトレイにアプリを格納する方法を紹介します
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 |
import nil as nil import wx.adv class Frame(wx.Frame): element_array = ('element_1', 'element_2', 'element_4', 'element_3', 'element_5') def __init__(self, parent=None): wx.Frame.__init__(self, parent) wx.Frame.SetTitle(self, 'テキストボックス') # タスクトレイに入れるアイコン self.ico = wx.Icon("sample.ico", wx.BITMAP_TYPE_ICO) self.tb_ico = wx.adv.TaskBarIcon() self.tb_ico.SetIcon(self.ico, u"tips comment") # タスクトレイアイコンのイベント関連付け self.tb_ico.Bind(wx.adv.EVT_TASKBAR_LEFT_UP, self.OnTbiLeftUp) self.tb_ico.Bind(wx.adv.EVT_TASKBAR_RIGHT_DCLICK, self.OnTbiRightDClicked) self.Bind(wx.EVT_ICONIZE, self.OnIconized) panel_ui = wx.Panel(self, -1, pos=(50, 50), size=(300, 200)) self.label = wx.StaticText(panel_ui, -1, '', pos=(10, 10)) self.box = wx.TextCtrl(panel_ui, -1, pos=(10, 50)) btn = wx.Button(panel_ui, -1, 'コピー', pos=(10, 150)) self.checkbox_1 = wx.CheckBox(panel_ui, wx.ID_ANY, 'チェックボックス1', pos=(10, 75)) self.combobox_1 = wx.ComboBox(panel_ui, wx.ID_ANY, '選択してください', choices=self.element_array, style=wx.CB_DROPDOWN, pos=(10, 90)) btn.Bind(wx.EVT_BUTTON, self.Clicked) def OnIconized(self, evt): self.Hide() self.tb_ico.SetIcon(self.ico, u"tips comment") def OnTbiRightDClicked(self, evt): self.tb_ico.RemoveIcon() wx.GetApp().ExitMainLoop() def OnTbiLeftUp(self, evt): self.Iconize(False) self.Show(True) self.Raise() self.tb_ico.RemoveIcon() def Clicked(self, evt): text = self.box.GetValue() self.box.Clear() text2 = "" if self.checkbox_1.GetValue() is True: text2 = "Yes" else: text2 = "No" text3 = "" text3 = self.element_array[self.combobox_1.GetSelection()] self.label.SetLabel(text + " " +text2 + " " + self.combobox_1.GetStringSelection()) def main(): app = wx.PySimpleApp() f = Frame() f.Show(True) app.SetTopWindow(f) app.MainLoop() if __name__ == "__main__": main() |
実行して出てきたウインドウの最小化ボタンをクリックすればタスクトレイに格納されます。
またタスクトレイに格納されたアイコンをクリックすれば再び表示されます!!
いかがでしたでしょうか?このwxPython、意外といろいろなところで使われているそうです。今後どこかで使う機会もあるかもですね。