wxPythonの今スグ使えるサンプル集18個!GUI開発をマスターしよう!

2022年4月26日火曜日

Python wxPython wxPythonサンプル

t f B! P L
今回はwxPythonの今すぐ使えるサンプルを紹介したいと思います。
wxPythonは自由度が高く、ウィジェットが豊富なので、応用するといろいろなツールが作れます。


※当サンプルで、sample.pngを扱います。以下の画像を名前を付けて保存で、ファイル名を「sample.png」とし、スクリプトと同じフォルダに入れておいてください
※一応著作権フリーなんで自由に使ってください。

目次:
1.シンプルサンプル
2.Sizerを利用した配置
3.ウィジェットの表示/非表示
4.チェックボックス
5.ラジオボタン
6.色選択ダイアログ
7.メニューバーを使う
8.ファイルダイアログを使う
9.フォントダイアログを使う
10.コンボボックスを使う
11.MediaCtrlを使う
12.WebViewを使う
13.有効無効
14.ListCtrlでファイル一覧
15.Bitmap
16.ListCtrlでアイコン表示
17.StaticTextをボタンとして使う
18.右クリックメニュー
19.カーソルの変化

1.シンプルサンプル

import wx

def onButton(event):
    #ボタンのクリックイベント
    text = textctrl.GetValue() #TextCtrlの文字列を取得
    wx.MessageBox(text + "さんこんにちは!","Hello",wx.ICON_INFORMATION) #メッセージボックスに表示

app = wx.App(0)
frame = wx.Frame(None,-1,"サンプルタイトル",size=(350,150)) #ウィンドウを生成
panel = wx.Panel(frame,-1) #TextCtrlやButtonなどを設置するためのPanelを生成
textctrl = wx.TextCtrl(panel,-1,"名前",pos=(5,5),size=(300,-1)) #TextCtrl
button = wx.Button(panel,-1,"Click Me!",pos=(5,30)) #Button
button.Bind(wx.EVT_BUTTON,onButton) #クリックイベントを指定
frame.Show(True)
app.MainLoop()
wxPythonの今スグ使えるサンプル集20個!GUI開発をマスターしよう!

2.Sizerを利用した配置

import wx

def onButton(event):
    #ボタンのクリックイベント
    text = textctrl.GetValue() #TextCtrlの文字列を取得
    wx.MessageBox(text + "さんこんにちは!","Hello",wx.ICON_INFORMATION) #メッセージボックスに表示

app = wx.App(0)
frame = wx.Frame(None,-1,"サンプルタイトル",size=(350,150)) #ウィンドウを生成
panel = wx.Panel(frame,-1) #TextCtrlやButtonなどを設置するためのPanelを生成
textctrl = wx.TextCtrl(panel,-1,"名前") #TextCtrl
button = wx.Button(panel,-1,"Click Me!") #Button
button.Bind(wx.EVT_BUTTON,onButton) #クリックイベントを指定
#レイアウト調整のためにSizerを使用
#BoxSizerを使うとpos=()などの設定もいらずに
#配置できる
sizer = wx.BoxSizer(wx.VERTICAL)
sizer.Add(textctrl,0,wx.EXPAND) 
sizer.Add(button,0)
panel.SetSizer(sizer)
frame.Show(True)
app.MainLoop()
wxPythonの今スグ使えるサンプル集20個!GUI開発をマスターしよう!
サンプル1と変わっていないように見えて、少し変わっています。
TextCtrlはウィンドウサイズを変更しても横に引き延ばされるようになっています。
また、pos=()などの設定もしていません。

3.ウィジェットの表示 / 非表示

import wx

def onButton(event):
    #ボタンのクリックイベント
    textctrl.Show() #○○.Show()で表示 / 再表示 できる
    sizer.Layout() #念のためSizerでレイアウトを再構成しておく。
    #Sizerを利用していない場合この関数は不要。

def onButton2(event):
    #ボタンのクリックイベント
    textctrl.Hide() #○○.Hide()で非表示にできる

app = wx.App(0)
frame = wx.Frame(None,-1,"サンプルタイトル",size=(350,150)) #ウィンドウを生成
panel = wx.Panel(frame,-1) #TextCtrlやButtonなどを設置するためのPanelを生成
textctrl = wx.TextCtrl(panel,-1,"名前") #TextCtrl
button = wx.Button(panel,-1,"表示") #Button
button.Bind(wx.EVT_BUTTON,onButton) #クリックイベントを指定
button2 = wx.Button(panel,-1,"非表示") #Button
button2.Bind(wx.EVT_BUTTON,onButton2) #クリックイベントを指定
#レイアウト調整のためにSizerを使用
sizer = wx.BoxSizer(wx.VERTICAL)
sizer.Add(textctrl,0,wx.EXPAND) 
sizer.Add(button,0)
sizer.Add(button2,0)
panel.SetSizer(sizer)
frame.Show(True)
app.MainLoop()
wxPythonの今スグ使えるサンプル集20個!GUI開発をマスターしよう!
表示 / 非表示を切り替えることができる

4.チェックボックス

import wx

def onButton(event):
    text = "Xiaomi:" + str(checkbox.GetValue())
    text += "\noppo:" + str(checkbox2.GetValue())
    text += "\nSamsung:" + str(checkbox3.GetValue())
    text += "\nSONY:" + str(checkbox4.GetValue())
    text += "\nGoogle:" + str(checkbox5.GetValue())
    wx.MessageBox(text,"タイトル",wx.ICON_INFORMATION)

app = wx.App(0)
frame = wx.Frame(None,-1,"サンプルタイトル",size=(350,150)) #ウィンドウを生成
panel = wx.Panel(frame,-1) #TextCtrlやButtonなどを設置するためのPanelを生成
checkbox = wx.CheckBox(panel,-1,"Xiaomi") #チェックボックス
checkbox2 = wx.CheckBox(panel,-1,"oppo")
checkbox3 = wx.CheckBox(panel,-1,"Samsung")
checkbox4 = wx.CheckBox(panel,-1,"SONY")
checkbox5 = wx.CheckBox(panel,-1,"Google")
button = wx.Button(panel,-1,"確認") #ボタン
button.Bind(wx.EVT_BUTTON,onButton) #クリックイベントを設定する
sizer = wx.BoxSizer(wx.VERTICAL) #Sizerでレイアウト調整
sizer.Add(checkbox)
sizer.Add(checkbox2)
sizer.Add(checkbox3)
sizer.Add(checkbox4)
sizer.Add(checkbox5)
sizer.Add(button)
panel.SetSizer(sizer)
frame.Show(True)
app.MainLoop()
wxPythonの今スグ使えるサンプル集20個!GUI開発をマスターしよう!

ラジオボタン

import wx

def onButton(event):
    text = "Xiaomi:" + str(checkbox.GetValue())
    text += "\noppo:" + str(checkbox2.GetValue())
    text += "\nSamsung:" + str(checkbox3.GetValue())
    text += "\nSONY:" + str(checkbox4.GetValue())
    text += "\nGoogle:" + str(checkbox5.GetValue())
    wx.MessageBox(text,"タイトル",wx.ICON_INFORMATION)

app = wx.App(0)
frame = wx.Frame(None,-1,"サンプルタイトル",size=(350,150)) #ウィンドウを生成
panel = wx.Panel(frame,-1) #TextCtrlやButtonなどを設置するためのPanelを生成
checkbox = wx.RadioButton(panel,-1,"Xiaomi") #ラジオボタン
checkbox2 = wx.RadioButton(panel,-1,"oppo")
checkbox3 = wx.RadioButton(panel,-1,"Samsung")
checkbox4 = wx.RadioButton(panel,-1,"SONY")
checkbox5 = wx.RadioButton(panel,-1,"Google")
button = wx.Button(panel,-1,"確認") #ボタン
button.Bind(wx.EVT_BUTTON,onButton) #クリックイベントを設定する
sizer = wx.BoxSizer(wx.VERTICAL) #Sizerでレイアウト調整
sizer.Add(checkbox)
sizer.Add(checkbox2)
sizer.Add(checkbox3)
sizer.Add(checkbox4)
sizer.Add(checkbox5)
sizer.Add(button)
panel.SetSizer(sizer)
frame.Show(True)
app.MainLoop()
wxPythonの今スグ使えるサンプル集20個!GUI開発をマスターしよう!

6.色選択ダイアログ

import wx

def onButton(event):
    dialog = wx.ColourDialog(frame) #カラーダイアログを表示
    if dialog.ShowModal()==wx.ID_OK:
        color = dialog.GetColourData().GetColour()
        lbl.SetForegroundColour(color) #ラベルの文字色に設定
        frame.Refresh() #これがないと反映されない

app = wx.App(0)
frame = wx.Frame(None,-1,"サンプルタイトル",size=(350,150)) #ウィンドウを生成
panel = wx.Panel(frame,-1) #TextCtrlやButtonなどを設置するためのPanelを生成
lbl = wx.StaticText(panel,-1,"テキストです。",pos=(5,5)) #ラベルを配置
button = wx.Button(panel,-1,"色を選択",pos=(5,30))
button.Bind(wx.EVT_BUTTON,onButton) #ボタンのクリックイベント
frame.Show(True)
app.MainLoop()
wxPythonの今スグ使えるサンプル集20個!GUI開発をマスターしよう!

7.メニューバーを使う

import wx
import sys

def SelectMenu(event):
    ID = event.GetId()
    if ID == 0:
        wx.MessageBox("あいうえお","あ",wx.ICON_WARNING)
    elif ID == 1:
        sys.exit()

app = wx.App(0)
frame = wx.Frame(None,-1,"サンプルタイトル",size=(350,150)) #ウィンドウを生成
#今回はウィジェットを配置しないためpanelを設置しない
menuBar = wx.MenuBar() #メニューバーを作成
FileMenu = wx.Menu() #新しくメニューを作成
FileMenu.Append(0,"あいうえお") #項目の追加
FileMenu.AppendSeparator() #セパレーターを追加
FileMenu.Append(1,"終了 (&X)") #項目の追加
menuBar.Append(FileMenu,"ファイル (&F)") #メニューバーにメニューを追加
frame.SetMenuBar(menuBar) #これがないとメニューバーが表示されない
frame.Bind(wx.EVT_MENU,SelectMenu) #メニューの選択イベント
frame.Show(True)
app.MainLoop()
wxPythonの今スグ使えるサンプル集20個!GUI開発をマスターしよう!

8.ファイルダイアログを使う

import wx
import sys

def SelectMenu(event):
    ID = event.GetId()
    if ID == 0:
        dialog = wx.FileDialog(frame,"Select File",wildcard="All Files (*.*) |  *.*"
                               ,style=wx.FD_OPEN |wx.FD_FILE_MUST_EXIST)
        if dialog.ShowModal()==wx.ID_OK:
            path = dialog.GetPath()
            file = open(path,"r",encoding="UTF-8",errors="ignore")
            textctrl.SetValue(file.read())
            file.close()
    elif ID == 1:
        dialog = wx.FileDialog(frame,"Select File",wildcard="All Files (*.*) |  *.*"
                               ,style=wx.FD_SAVE | wx.FD_OVERWRITE_PROMPT)
        if dialog.ShowModal()==wx.ID_OK:
            path = dialog.GetPath()
            file = open(path,"w",encoding="UTF-8",errors="ignore")
            file.write(textctrl.GetValue())
            file.close()

app = wx.App(0)
frame = wx.Frame(None,-1,"サンプルタイトル",size=(400,300)) #ウィンドウを生成
textctrl = wx.TextCtrl(frame,-1,style=wx.TE_MULTILINE) #panelではなくframeに設置しちゃうことで全体に引きのばされる
menuBar = wx.MenuBar() #メニューバーを作成
FileMenu = wx.Menu() #新しくメニューを作成
FileMenu.Append(0,"開く") #項目の追加
FileMenu.AppendSeparator() #セパレーターを追加
FileMenu.Append(1,"保存") #項目の追加
menuBar.Append(FileMenu,"ファイル (&F)") #メニューバーにメニューを追加
frame.SetMenuBar(menuBar) #これがないとメニューバーが表示されない
frame.Bind(wx.EVT_MENU,SelectMenu) #メニューの選択イベント
frame.Show(True)
app.MainLoop()
wxPythonの今スグ使えるサンプル集20個!GUI開発をマスターしよう!
ファイルの読み込みに関しては別の記事を参考にしてください。 Pythonでファイルを読み込む / 書き込む / エンコードを検出する

9.フォントダイアログを使う

import wx
import sys

def onButton(event):
    dialog = wx.FontDialog(frame)
    if dialog.ShowModal()==wx.ID_OK:
        textctrl.SetFont(dialog.GetFontData().GetChosenFont())

app = wx.App(0)
frame = wx.Frame(None,-1,"サンプルタイトル",size=(400,300)) #ウィンドウを生成
panel = wx.Panel(frame,-1)
textctrl = wx.TextCtrl(panel,-1,size=(300,-1),pos=(5,5))
button = wx.Button(panel,-1,"フォントを変える",pos=(5,30))
button.Bind(wx.EVT_BUTTON,onButton)
frame.Show(True)
app.MainLoop()
wxPythonの今スグ使えるサンプル集20個!GUI開発をマスターしよう!

10.コンボボックスを使う

import wx
import sys

def onButton(event):
    wx.MessageBox(combobox.GetValue(),"aiueo",wx.ICON_INFORMATION)

app = wx.App(0)
frame = wx.Frame(None,-1,"サンプルタイトル",size=(400,300)) #ウィンドウを生成
panel = wx.Panel(frame,-1)
combobox = wx.ComboBox(panel,-1,choices=["Android","iOS","Harmony OS"],size=(300,-1),pos=(5,5))
#選択肢以外選択できないようにするには以下のように
#combobox = wx.ComboBox(panel,-1,choices=["Android","iOS","Harmony OS"],size=(300,-1),pos=(5,5),
#                       style=wx.CB_READONLY)
combobox.SetValue("Android")
button = wx.Button(panel,-1,"ボタン",pos=(5,30))
button.Bind(wx.EVT_BUTTON,onButton)
frame.Show(True)
app.MainLoop()
wxPythonの今スグ使えるサンプル集20個!GUI開発をマスターしよう!

11.MediaCtrlを使う

これについては次のサイトで解説しております。
wxPythonで動画プレイヤーを作成してみる wx.MediaCtrl
wxPythonで動画プレイヤーを作成してみる
wx.MediaCtrl

12.WebViewを使う

import wx
import wx.html2
class MyFrame(wx.Frame):
    def __init__(self):
        wx.Frame.__init__(self,None,-1,"サンプル",size=(500,300))
        self.webveiw = wx.html2.WebView.New(self,-1,backend=wx.html2.WebViewBackendEdge)
        self.webveiw.LoadURL("https://youtube.com")

app = wx.App(0)
MyFrame().Show(True)
app.MainLoop()
wxPythonの今スグ使えるサンプル集20個!GUI開発をマスターしよう!

13.有効無効

import sys
import wx
class MyFrame(wx.Frame):
    def onRadio1(self,event):
        self.textctrl.Enable()
    def onRadio2(self,event):
        self.textctrl.Disable()
    def __init__(self):
        wx.Frame.__init__(self,None,-1,"タイトル")
        panel = wx.Panel(self,-1)
        radio1 = wx.RadioButton(panel,-1,"テキストボックスを有効にする")
        radio1.Bind(wx.EVT_RADIOBUTTON,self.onRadio1)
        self.textctrl = wx.TextCtrl(panel,-1,"")
        radio2 = wx.RadioButton(panel,-1,"テキストボックスを無効にする")
        radio2.Bind(wx.EVT_RADIOBUTTON,self.onRadio2)
        sizer = wx.BoxSizer(wx.VERTICAL)
        sizer.Add(radio1)
        sizer.Add(self.textctrl)
        sizer.Add(radio2)
        panel.SetSizer(sizer)
app = wx.App(0)
frame = MyFrame()
frame.Show(True)
app.MainLoop()
wxPythonの今スグ使えるサンプル集20個!GUI開発をマスターしよう!

14.ListCtrlでファイル一覧

次の記事で紹介しております。
wxPythonで簡単なファイルマネージャーを作成する
wxPythonで簡単なファイルマネージャーを作成する
wx.ListCtrl

15.Bitmap

import wx
import sys
def onButton(event):
	wx.MessageBox("クリックされました!","ああ")
app = wx.App(0)
frame = wx.Frame(None,-1,"サンプルタイトル",size=(1000,700)) #ウィンドウを生成
panel = wx.Panel(frame,-1) #パネルを作成
img = wx.StaticBitmap(panel,-1,wx.Bitmap("sample.png")) #これがBitmap(ラベル版)
img2 = wx.BitmapButton(panel,-1,wx.Bitmap("sample.png"),pos=(0,300)) #これがBitmap(ボタン版)
img2.Bind(wx.EVT_BUTTON,onButton)
frame.Show(True)
app.MainLoop()
BitmapButtonについてですが、つがいがってはほとんどButtonと同じです。

16.ListCtrlでアイコンの表示

import wx
import sys
def onItem(event):
	index = listctrl.GetFirstSelected()
	text = listctrl.GetItemText(index)
	wx.MessageBox(text)
app = wx.App(0)
frame = wx.Frame(None,-1,"サンプルタイトル",size=(1000,700)) #ウィンドウを生成
listctrl = wx.ListCtrl(frame,-1,style=wx.LC_ICON)
listctrl.Bind(wx.EVT_LIST_ITEM_SELECTED,onItem)

imagelist = wx.ImageList(32,32) #イメージリスト
imagelist.Add(wx.Icon("sample.png",wx.BITMAP_TYPE_PNG))
imagelist.Add(wx.Icon("sample.png",wx.BITMAP_TYPE_PNG))
listctrl.AssignImageList(imagelist, wx.IMAGE_LIST_NORMAL) #割り当て
listctrl.InsertItem(0,"アイテム1",0)
listctrl.InsertItem(0,"アイテム2",0)

frame.Show(True)
app.MainLoop()

17.StaticTextをボタンとして使う

import wx
import sys
def onButton(event):
	wx.MessageBox("おされた")
app = wx.App(0)
frame = wx.Frame(None,-1,"サンプルタイトル",size=(500,400)) #ウィンドウを生成
panel = wx.Panel(frame,-1) #パネルを作成

button = wx.StaticText(panel,-1,"ボタン(風ラベル)", pos = (5,5)) #ラベル作成
button.SetBackgroundColour("YELLOW") #背景色の設定
button.Bind(wx.EVT_LEFT_DOWN, onButton) #クリックイベントを設定

frame.Show(True)
app.MainLoop()

18.右クリックメニュー

import wx
import sys
def showMenu(event):
	frame.PopupMenu(menu)

def selectMenu(event):
	Id = event.GetId()
	if Id == 0:
		wx.MessageBox("切り取り")
	elif Id == 1:
		wx.MessageBox("コピー")
	elif Id == 2:
		wx.MessageBox("貼り付け")
	elif Id == 3:
		wx.MessageBox("元に戻す")
app = wx.App(0)
frame = wx.Frame(None,-1,"右クリックしてー",size=(500,400)) #ウィンドウを生成
panel = wx.Panel(frame,-1) #パネルを作成

panel.Bind(wx.EVT_RIGHT_DOWN,showMenu)

menu = wx.Menu()
menu.Append(0,"切り取り")
menu.Append(1,"コピー")
menu.Append(2,"貼り付け")
menu.AppendSeparator()
menu.Append(3,"元に戻す")

menu.Bind(wx.EVT_MENU,selectMenu)

frame.Show(True)
app.MainLoop()

19.カーソルの変化

import wx
import sys

app = wx.App()
frame = wx.Frame(None,-1,"カーソルがあれになります",size=(500,400)) #ウィンドウを生成
panel = wx.Panel(frame,-1) #パネルを作成

frame.SetCursor(wx.Cursor(wx.CURSOR_WAIT))

frame.Show(True)
app.MainLoop()


ざっとしかチェックしてないんで、なんか不具合あったらコメントで。

さいごに

GUI開発は大変だけどなかなか楽しいものです。
皆さんもこれを参考に、GUI開発を楽しんでいきませんか?

このブログを検索

要望について

ブログのレイアウトやテーマについての提案をいただきました。現在qooqテーマを適応中です。 語尾を自動でつけるプログラムを作りたいという要望をいただきました。是非紹介したいですがどの言語でどのようなプログラムかなど、お問い合わせフォームで詳しく教えてください!

最近の出来事

最近の出来事
寿司打お勧め75位♪(練習モードだけど)

アンケート

Welcome!

「プログラミング独学ブログ」へようこそ。 Yakinyといいます。幅広い範囲で投稿していますので、ぜひ過去の記事も見てみてください!!コメントも大歓迎です!更新がとまってしまって申し訳ございません

お問い合わせ

名前

メール *

メッセージ *

QooQ