Pythonスキルの習得

【 Python 】 かっこいいGUI wxPythonの使い方入門 その2 – ウィジェットの紹介 –

【 Python 】 かっこいいGUI wxPythonの使い方入門 その2 - ウィジェットの紹介 -

本記事は、

  • Pythonのスキル、初心者以上の方

を対象にした内容になっております。


本記事を含む、一連の記事を読むことで、(全7回)

  • かっこよくて
  • おしゃれな

「簡単なGUIアプリ」を作成できるようになります。

例えば、wxPythonで、画像表示アプリを作ってみました。

上絵みたいな、見た目(Macの場合)となります。

本記事は、下記の続編となります。

前回の記事を読んでいなくても、内容が理解できるよう、配慮しています。

【 Python 】 かっこいいGUI wxPythonの使い方入門 その1
【 Python 】 かっこいいGUI wxPythonの使い方入門 その1Pythonの、かっこいいGUIである、wxPythonの使い方を紹介した記事です。...

本記事のゴールイメージ

本記事では、前回予告した通り

  • よく使用するウィジェット(ボタン等)の紹介、設置方法

を紹介します。

※ 全体を俯瞰的に見れるよう、スタイル等の詳細設定には、触れない内容になっています。(別記事にします。)

wxPython ウィジェットの紹介と設置方法

紹介するウィジェットは

  • ラベル
  • テキストコントロール
  • ボタン
  • チェックボックス
  • ラジオボタン
  • リストボックス
  • コンボボックス
  • スライダー
  • イメージ コントロール(画像表示に使用)
  • メディア コントロール(動画再生に使用)

となります。

以下の章で紹介しているコードは、下記コードの7〜9行目に相当する部分になります。

import wx

class MyFrame(wx.Frame):
    def __init__(self):
        super().__init__(None, id=-1, title='wxPython')

        ######################################
        #  ここに入るコードのみ、紹介していきます。
        ######################################

        self.Show()

if __name__ == '__main__':
    app = wx.App()
    frame = MyFrame()
    app.MainLoop()

今回紹介するウィジェットは、

見た目がおかしい

状態になっています。

次回の記事にて、見た目の修正方法をご紹介します。

ラベルの設置

コード

label = wx.StaticText(self, id=-1, label='任意の文字')

上記コードの

  • 第1引数 → 親を表します。(このケースでは、MyFrameオブジェクト自身なので、self になっています。)
  • 第2引数 → 自分自身のIDを指定。 指定がない場合 -1(wx.ID_ANY でもOK)

他のウィジェットも、同じ設定をします。

実行結果

テキストコントールの設置

ラベルと異なり、キーボート等により、文字入力可能なウィジェットです。

コード

text = wx.TextCtrl(self, -1, value='最初に表示する文字')

実行結果

画面全体にテキストコントロールが広がっています。

(下記画像の青枠部分がテキストコントロールです。)

ボタンの設置

コード

btn = wx.Button(self, -1, label='ボタン名')

実行結果

チェックボックスの設置

コード

checkbox = wx.CheckBox(self, -1, '表示したいラベル')

実行結果

ラジオボタンの設置

コード(横に並べる場合)

radio_array = ('選択1', '選択2', '選択3', '選択4')
radio_box = wx.RadioBox(self, -1, '枠に表示したい文字', choices=radio_array)

実行結果


コード(縦に並べる場合)

radio_array = ('選択1', '選択2', '選択3', '選択4')
radio_box = wx.RadioBox(self, -1, '枠に表示したい文字',
                        choices=radio_array, style=wx.RA_VERTICAL)

実行結果

リストボックスの設置

コード(単独選択の場合)

list_array = ('list1', 'list2', 'list3', 'list4')
listbox = wx.ListBox(self, -1, choices=list_array)

実行結果

コード(複数選択の場合)

ListBox( )内の引数「style」を、下記の通り設定します。

list_array = ('list1', 'list2', 'list3', 'list4')
listbox = wx.ListBox(self, -1, choices=list_array, style=wx.LB_MULTIPLE)

実行結果

コンボボックスの設置

コード

choices = ['選択A', '選択B', '選択C']
combo = wx.ComboBox(self, -1, '選択して下さい。', choices=choices)

実行結果

下記ウインドウの 🔽 を押した時の画面です。

表示位置がおかしな位置になっていますが、次回記事にて、修正方法を解説します。

スライダーの設置

コード

slider = wx.Slider(self, -1)

# 縦方向のスライダーにしたい場合は、下記
# slider = wx.Slider(self, -1, style=wx.SL_VERTICAL)

実行結果

イメージコントロールの設置

コード

# bitで表現させる
bitmap = wx.Image('画像ファイルへのパス').ConvertToBitmap()
# イメージコントロールを配置
wx.StaticBitmap(parent=self,
                bitmap=bitmap,
                size=bitmap.GetSize()
                )

実行結果

下記画像は一例です。

メディアコントールの設置

コード

# 下記importが必要 
import wx.media

media = wx.media.MediaCtrl(self, -1)

実行結果

空のウインドウが表示されるだけです。

動画ファイルを読み込んで、再生する方法は、別記事にて紹介いたします。

不具合内容と、次回予告

今回の設定では、途中でお話しした通り、

  • ウィジェットの見た目がおかしい

状態になっています。

その他の問題点として、ウィジェットを複数設置した場合、重なって表示されます。

ウィジェット 複数設置の例;

例えば、下記コードを入力した場合、

label = wx.StaticText(self, id=-1, label='label:')
text = wx.TextCtrl(self, id=-1, value='aa')

実行結果は、以下の通りになります。

これを回避するには、以下の方法があります。(非推奨)

下記のように、ウィジェットに表示位置を設定(2行目のposを追加)して、回避する事もできます。

label = wx.StaticText(self, id=-1, label='label: ')
text = wx.TextCtrl(self, id=-1, value='aa', pos=(0, 50))

posとは、ウィジェットの場所を、ウインドウ左上を基準にして、絶対座標(ピクセル)で指定するものです。

実行結果

その他にも問題点があります。

ウインドウサイズを大きくした場合(マウスのドラッグ等にて)、期待した通りの見た目になっていません。

下記の通りです。

ウインドウサイズが大きくなっても、各ウィジェットの配置場所が、左上端を基準にした位置に、固定されています。

いい感じに、再レイアウトして欲しいところです。

次回は、これらの問題点を修正するため、レイアウトの紹介をします。

次回記事へのリンクです。

【 Python 】かっこいいGUI wxPythonの使い方入門 その3 - レイアウト( Panel , Sizer )の紹介 -
【 Python 】かっこいいGUI wxPythonの使い方入門 その3 - レイアウト( Panel , Sizer )の紹介 -Pythonの、かっこいいGUIである、wxPythonの使い方を紹介した記事です。wxPythonにおいて、レイアウト設計の考え方と設置方法をご紹介しました。パネルと、サイザー(wrapsizer、staticboxsizer、flexgridsizer、gridsizer、boxsizer)の概要説明と、Pythonによるコード紹介をした記事です。...

最後まで、読んで頂き、ありがとうございました。

またお会いしましょう。