リンク

2016年11月7日月曜日

pythonでGUIツールを作る ~ Notebook ノートブック ~

ここではwxPythonのNotebook(ノートブック)をご紹介します。

ノートブックと言われてもピンとこないかもしれませんが、俗にいう「タブ」だと思って差し支えありません。
# -*- coding: utf-8 -*-

import wx

application = wx.App()
frame = wx.Frame(None, wx.ID_ANY, u"タイトル", size=(300, 300))

# Notebook
notebook = wx.Notebook(frame, wx.ID_ANY)

panel_1 = wx.Panel(notebook, wx.ID_ANY)
panel_2 = wx.Panel(notebook, wx.ID_ANY)
panel_3 = wx.Panel(notebook, wx.ID_ANY)

# パネル1lにテキストを追加
wx.StaticText(panel_1, wx.ID_ANY, u'タブ1上のテキスト', pos=(50, 50))

# パネル2にボタンを追加
wx.Button(panel_2, wx.ID_ANY, u'タブ2上のボタン', pos=(20, 20))

# パネル3に画像を追加
wx.StaticBitmap(panel_3, wx.ID_ANY, wx.Bitmap('./python.ico'))

notebook.AddPage(panel_1, u"タブ1")
notebook.AddPage(panel_2, u"タブ2")
notebook.AddPage(panel_3, u"タブ3")

frame.Show()

# なんか変なのが表示される対処
notebook.Refresh()

application.MainLoop()
<結果>

上記スクリプト内で、過去に解説した内容については省略致します。
ご確認いただきたい場合は、pythonでGUIツールを作る ~基礎編~をご覧ください。

続いて解説を行います。
- - - 詳細 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
notebook = wx.Notebook(frame, wx.ID_ANY)
ノートブックを使用するにはwx.Notebookクラスを使用します。
基本的な引数は(親ウィジット、識別子)です。

上記サンプルでは、3つのパネルを作成し、それぞれにStaticText、Button、StaticBitmapを設置しています。
そして各パネルをノートブックに追加しています。
notebook.AddPage(panel_1, u"タブ1")
notebook.AddPage(panel_2, u"タブ2")
notebook.AddPage(panel_3, u"タブ3")
StaticText、Buttonについてはそれぞれの記事をご覧ください。
 pythonでGUIツールを作る ~スタティックテキスト(ラベル)~
 pythonでGUIツールを作る ~ボタン~

また、(私の環境だけかもしれませんが)上記サンプルを実行した際、タブ1の左上部に■が表示されてしまいます。
これを回避するため、この一文を追加しています。
# なんか変なのが表示される対処
notebook.Refresh()

ノートブック作成時にスタイルを指定することでタブの位置を変更するなどが可能です。
# タブを上に配置
notebook = wx.Notebook(frame, wx.ID_ANY, wx.NB_TOP)

# タブを左に配置
notebook = wx.Notebook(frame, wx.ID_ANY, wx.NB_LEFT)

# タブを右に配置
notebook = wx.Notebook(frame, wx.ID_ANY, wx.NB_RIGHT)

# タブを下に配置
notebook = wx.Notebook(frame, wx.ID_ANY, wx.NB_BOTTOM)

# 全タブのサイズを統一する(Windows限定)
notebook = wx.Notebook(frame, wx.ID_ANY, wx.NB_FIXEDWIDTH)

# タブを複数行にする(Windows限定)
notebook = wx.Notebook(frame, wx.ID_ANY, wx.NB_MULTILINE)

続いて、ノートブックで使用する主な関数を列挙いたします。
# タブを追加する
notebook.AddPage()

# タブを指定の位置に追加する
notebook.InsertPage(インデックス値, 対象ウィジット、タブラベル)
例:notebook.InsertPage(1, panel_4、u'タブ4')

# 指定タブのラベルを取得する
notebook.GetPageText(インデックス値)
例:notebook.GetPageText(1) ## 1はインデックス値なのでタブ2のこと

# 指定タブのラベルを設定する
notebook.SetPageText(インデックス値, '新しいタブ名')

# タブ数を取得する
notebook.GetPageCount()

# 選択中のタブのインデックス値を取得する
notebook.GetSelection()

# 指定タブを選択状態にする
notebook.ChangeSelection(インデックス値)

# 指定タブを削除する
notebook.DeletePage(インデックス値)

# 全てのタブを削除する
notebook.DeleteAllPages()

3 件のコメント:

  1. こんにちは,いつも分かりやすい説明ありがとうございます!

    > # 指定タブを削除する
    > notebook.DeletePag(インデックス値)

    この2行目がDeletePageになっていません。
    暇なときに修正をお願いします。

    返信削除
    返信
    1. コメント&ご指摘ありがとうございます。
      修正させていただきましたm(_ _)m

      削除
  2. Best 10 Casinos Near Casinos in Atlanta 2021 - Mapyro
    Casinos Near Atlanta 2020 · MGM 포항 출장안마 National Harbor · 군포 출장안마 Beau Rivage Casino Resort · 계룡 출장안마 The Venetian · The 서울특별 출장마사지 Venetian 포천 출장샵 · The Wynn · The Star

    返信削除