README的なアレ

はじめに:

と言っても、これ最初に書いた記事じゃないんですが、その辺はいいとして。

使用目的:

このブログは、編集者ことこの僕が、主に下記の目的で使うことを念頭に記載しています。

  1. 個人的なプログラムの書き方などのメモ、およびその管理とアクセス。
  2. その日の作業ログ的なまとめ。
  3. 暇潰しの日記

留意事項:

こんな日記でも意識的あるいは無意識的に閲覧される方もおられるでしょう。ただ、意識的にご覧になる方、特に掲載されている稚拙なプログラムを参照される方は特に注意していただきたいのですが、

  • このブログは、個人的なメモ用途を前提に記しています。参考にしてくださるのは嬉し恥ずかしという想いではありますが、そこで起きた如何なる損害にも僕は対応できません。あまり、信用し過ぎないで下さい。特に、ピュアなそこのあなた。注意ですよ。
  • 掲載されているプログラムの動作保証はできません。動作確認をしてはいますが、それも素人のすることだと思ってください。
  • 掲載されているプログラムや操作などをしたことによって損害を被ることがあったとしても、僕では責任が取れません。そこまで、危険なことはそもそもしませんが、実行する場合は保証が無いということを念頭に置いて実行してください。
  • 先輩プログラマの皆様、並びに高い能力をお持ちの方々におかれましては、特に念を押しますが、どうか生温かい目で見てやっていただきたいと思います。目立ちたがりというか、パフォーマーというか、そういう子どもみたいな部分が僕にはあるんです。知ったかぶりやがってとか思うことばかりでしょうが、反論の余地はないので、ごめんなさいとしか言いようがありません(そもそもそんな方が、こんな中身のないブログを見ることはないでしょうが)。
  • 知ったかぶりやがってとか思うことばかりでしょうが、反論の余地はないので、ごめんなさいとしか言いようがありません。大事なことなので2回言いました。

また、これもご了承願いたいことではあるんですが、有り体に言って僕は漫画もアニメもゲームも大好きな人間です。おそらく、随所に痛い表現が多分に含まれることになるでしょうが、そこは深く息を吸って、何か楽しいことでも考えて、気持ちをリセットしてから、寛大な心で受け入れてください。
あるいは、スルーしてください。人間の脳は、いつだってフィルタリングを行っているんです。無意識でもできますから、きっと意識的にもできるでしょう。
舌打ちなどの行為はおすすめできません。人間の感情は、その時の言動に大きく左右される側面があるからです。てゆうか、知ることがないとは言え、されてると考えると少々凹みます。

大体、こんな感じです。あ、あと表現が何かおかしいなって部分もあるでしょうが、大丈夫です。それは表現がおかしいんじゃなくて、僕の頭がおかしいだけです。ご安心下さい。

コンテンツ:

コンテンツなんて呼べるほどのものはありませんが、まあ一応。
カテゴリー毎の説明を入れておきます。

  • はじめに:この『README的なアレ』が含まれます。てゆうか、それのみです。
  • notes:特に意味もなく、何となく書いた、未分類のガーベージみたいなもんだと思ってください。
  • Pythonなど:プログラミング言語名のカテゴリは、その言語にまつわる個人的なメモが記されています。ただ、何分学がない人間のすることなので、大した情報量を持ちませんし、正確である保証などどこにも存在しません。
  • UNIXなど:OSやディストリビューションなどのカテゴリも、言語のそれと大体同じです。中身がないところまで瓜二つです。
  • VariousTips:分類するほどでもないような小ネタをまとめたものです。言語でも、一部の機能を限定的に用いるなどの場合について、という感じでしょうか。

wxPythonにてメニューバーを弄ってみたい坊っちゃま

参考URL:wxPythonチュートリアル

まあ基本的にこのチュートリアルが大変素晴らしいものなので、こんなとこを参照するよりはよほど情報量が多いことでしょう。

さて、こっちは本題へと移ります。
実際に様々な情報を糧に、色々と試してみた結果ということで、今回のメモ。

動作検証環境:BSD

今回は、以下の内容の検証に的を絞りました。

  • 第一に、メニューバーのカスタマイズの方法。
  • メニューバーに登録したイベントのショートカットキーの登録法。
  • メニューの作り方と、その登録法。

ソースコード

早速、ソースコードから。

#!/usr/bin/env python
#coding: utf-8
import wx

class TestFrame(wx.Frame):
    def __init__(self,parent,id,title):
        wx.Frame.__init__(self,parent,title=title,size=(320,240))

        # Setting up the menu on menubar.
        FileMenu = wx.Menu()

        # It is easy technique + alpha.
        menuAbout = FileMenu.Append(wx.ID_ABOUT,"&About\tCtrl+A"," Informations")
        # "wx.MenuItem" are made by oneself.
        menuItemMsg = wx.Menu()
        menuItemMsg = wx.MenuItem(FileMenu, 1, '&Message\tCtrl+M')
        menuItemMsg.SetBitmap(wx.Bitmap('fox.png'))
        FileMenu.AppendItem(menuItemMsg)
        # It is easily technique.
        menuExit = FileMenu.Append(wx.ID_EXIT,"E&xit"," Exit program")

        # Creating menu bar.
        MenuBar = wx.MenuBar()
        MenuBar.Append(FileMenu,"&File")
        self.SetMenuBar(MenuBar)

        # Set Events.
        self.Bind(wx.EVT_MENU,self.OnAbout,menuAbout)
        self.Bind(wx.EVT_MENU,self.OnMsg,menuItemMsg)
        self.Bind(wx.EVT_MENU,self.OnExit,menuExit)

        # Show window.
        self.Show(True)

    def OnAbout(self,e):
        # create message dialog.
        dlg=wx.MessageDialog(self,"This is the test code.","Dialog Title.",wx.OK)
        # Show dialog.
        dlg.ShowModal()
        # Finally destroy it when finished.
        dlg.Destroy()

    # Copy from onAbout().
    def OnMsg(self,e):
        # create message dialog.
        dlg=wx.MessageDialog(self,"This is the test code.","Dialog Title.",wx.OK)
        # Show dialog.
        dlg.ShowModal()
        # Finally destroy it when finished.
        dlg.Destroy()

    def OnExit(self,e):
        # Exit the frame.
        self.Close(True)

class MyApp(wx.App):
    def OnInit(self):
        frame=TestFrame(None,wx.ID_ANY,"Menubar Test")
        self.SetTopWindow(frame)
        return True

app=MyApp(0)
app.MainLoop()

簡易メモ:

ええと、詳細は偉い人たちに丸投げするとして、簡便に、簡潔に、まとめて置こうと思います。

まず、これを実行すると、メニューバーに「File」ボタンが1つあるだけのウィンドウが生成されます。
この「File」ボタンをクリックすると、「About」、「Message」、「Exit」の3つのメニューが展開されます。この関係をツリー構造で表すと、

[File]
  |---[About]
  |---[Message]
  ----[Exit]

こんな感じです。

結果:

この検証結果と言うか、プログラムを書いている間に気になったことのリストアップ。

  1. '&About\tCtrl+A'で、簡単にキーバインドを登録できる。
  2. wx.ID_EXITなどの中には、既にキーバインドが登録されているものもある。(wx.ID_EXITならCtrl-Q)
  3. menuItemMsg.SetBitmapでは、メニューにアイコンを設定しているが、これは元画像の大きさがそのまま反映されてしまうので、あらかじめ24x24くらいに画像を縮小しておいた方が良い。