最もシンプルな例

シンプルなボタンひとつのアプリケーション

tags:python, gui, tips
created:2007-02-05T20:24:24

シンプルな例で基本をマスターしよう!

ファイルリスト

  • resource.xrc
  • sample.py
  • wx_utils.py
  • setup.py
  • main_icon.ico
  • main_icon.py

リソース内容

これはXRCedを使って編集した結果です。

resource.xrc

<?xml version="1.0" encoding="utf-8"?>
<resource>
  <object class="wxFrame" name="MainFrame">
    <title></title>
    <object class="wxBitmapButton" name="ID_BIG_BUTTON">
      <bitmap stock_id="wxART_INFORMATION"></bitmap>
    </object>
    <size>480,320</size>
    <bg>#FFFFFF</bg>
  </object>
</resource>

メインコード

sample.py

#!/usr/bin/local/python
# -*- coding: utf-8 -*-

import sys
import os
import wx
import wx_utils
from wx_utils import XRC, XRCID, XRCCTRL

import main_icon

class MainFrame(wx.Frame):
  u"""MainFrame class deffinition.
  """
  RESOURCE_ID = 'MainFrame'
  #MENUBAR_ID = 'MainMenubar'
  binder = wx_utils.bind_manager(RESOURCE_ID)

  def __init__(self, parent=None):
    pre = wx.PreFrame()
    XRC().LoadOnFrame(pre, parent, self.RESOURCE_ID)
    self.PostCreate(pre)
    #self.SetMenuBar(XRC().LoadMenuBar(self.MENUBAR_ID))
    self.binder.bindall(self, self.RESOURCE_ID)
    self.SetIcon(main_icon.getIcon())

  @binder(wx.EVT_BUTTON, id=XRCID('ID_BIG_BUTTON'))
  def OnMenuAbout(self, event):
    wx.SafeShowMessage(u'情報', 'BIG Button Pressed!')

# startup application.
if __name__=='__main__':
  app = wx.App(False)
  wx_utils.XrcInit()
  frame = MainFrame()
  app.SetTopWindow(frame)
  frame.Show()
  app.MainLoop()

解説

ファイル「main_icon.py」ってなに?

main_icon.pyはいかのコマンドをつかってジェネレートします。

img2py -i main_icon.ico main_icon.py

この「img2py」はwxPythonパッケージに含まれているユーティリティです。

ファイル「setup.py」ってなに?

py2exeを使って、Pythonスクリプトをexe形式に変換するスクリプトです。

setup.py

import sys
from distutils.core import setup
import py2exe
from wx_utils import manifest

if not 'py2exe' in sys.argv:
  sys.argv.insert(1, 'py2exe')

py2exe_options = {
  'compressed': 1,
  'optimize': 0,
  'includes': [],
  'excludes': [],
  'dll_excludes': [],
  'packages': [],
  'bundle_files': 2}

setup(
  options = {'py2exe': py2exe_options},
  windows = [{
    'script' : 'sample.py',
    'icon_resources': [(1, 'main_icon.ico')],
    'other_resources': [(24,1,manifest('sample'))],
  }],
  data_files =[],
  zipfile = None)

自分のアプリケーション開発時には、 20行目の「’script’ : ‘sample.py’」や 22行目の「’other_resources’: [(24,1,manifest(‘sample’))]」にある 「sample」をアプリケーション名に適時書き換えてくださいね。

実行すると、resource.xrcをコンパイルしたresource.pyを作成し、 distフォルダの中に以下のファイルを生成します。

FileName Size
sample.exe 3,508,993
python24.dll 1,867,776
MSVCR71.dll 352,256
w9xpopen.exe 4,608

sample.exeはライブラリや依存モジュールのほとんどを含んでいるため サイズが大きくなってしまいますが、 これらのファイルをPythonのインストールしていないPCに持っていっても動作します。