Python/wxPythonによるWindowsGUIプログラミング
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
単語検索
|
最終更新
]
開始行:
目次
#contents
* 1. はじめに [#uad089b6]
** 1.1 概要 [#u6fe2e85]
Pythonは手軽に書けて、本格的なプログラミングにも使える...
動作確認に使用したバージョンは以下のとおりです。
- Python 2.6.6
- wxPython 2.8.11
** 1.2 対象 [#x3549044]
Pythonによる開発経験のある方を対象としています。Python...
** 1.3 wxPythonとは [#tde1a05c]
wxPythonは、Pythonから利用できるGUIツールキットです。そ...
今回はWindows環境で説明していきますが、インストールなど...
* 2. wxPythonを使ってみる [#l34486cd]
** 2.1 ウィンドウを表示する [#wed52250]
では実際にwxPythonでGUIアプリケーションを作ってみましょ...
CENTER:&ref(sample_2_1.jpg);
ソースコードは以下のようになっています。
- sample_2_1.py
#pre{{
import wx
class SampleApp(wx.App):
def OnInit(self):
self.init_frame()
return True
def init_frame(self):
self.frm_main = wx.Frame(None)
self.frm_main.SetTitle("Hello, wxPython!")
self.frm_main.SetSize((400, 200))
self.frm_main.Show()
if __name__ == "__main__":
app = SampleApp(False)
app.MainLoop()
}}
sample_2_1.pyは標準的なwxPythonアプリケーションの雛形で...
まず、wx.Appを継承したSampleAppクラスを定義しています。...
このスクリプトを実行すると、SampleAppのオブジェクトが生...
** 2.2 コントロールを配置する [#je9687ff]
ウィンドウにコントロールをいくつか配置してみましょう。
CENTER:&ref(sample_2_2.jpg);
ソースコードは以下のようになっています。
- sample_2_2.py
#pre{{
import wx
class SampleApp(wx.App):
def OnInit(self):
self.init_frame()
return True
def init_frame(self):
self.frm_main = wx.Frame(None)
self.sizer = wx.BoxSizer()
self.frm_main.SetSizer(self.sizer)
self.txt_title = wx.TextCtrl(self.frm_main)
self.sizer.Add(self.txt_title, 1, wx.ALIGN_CENTER...
self.btn_submit = wx.Button(self.frm_main)
self.btn_submit.SetLabel("Submit")
self.sizer.Add(self.btn_submit, 0, wx.ALIGN_CENTE...
self.frm_main.SetTitle("sample_2_2")
self.frm_main.SetSize((400, 200))
self.frm_main.Show()
if __name__ == "__main__":
app = SampleApp(False)
app.MainLoop()
}}
ウィンドウにwx.TextCtrlとwx.Buttonを配置してみました。w...
CENTER:&ref(sample_2_2_sizer.jpg);
** 2.3 イベント処理 [#y2c41615]
コントロールを操作したときのイベント処理を追加してみま...
CENTER:&ref(sample_2_3.jpg);
ソースコードは以下のようになっています。
- sample_2_3.py
#pre{{
import wx
class SampleApp(wx.App):
def OnInit(self):
self.init_frame()
return True
def init_frame(self):
self.frm_main = wx.Frame(None)
self.sizer = wx.BoxSizer()
self.frm_main.SetSizer(self.sizer)
self.txt_title = wx.TextCtrl(self.frm_main)
self.sizer.Add(self.txt_title, 1, wx.ALIGN_CENTER...
self.btn_submit = wx.Button(self.frm_main)
self.btn_submit.SetLabel("Change Title")
self.btn_submit.Bind(wx.EVT_BUTTON, self.on_submit)
self.sizer.Add(self.btn_submit, 0, wx.ALIGN_CENTE...
self.frm_main.SetTitle("sample_2_3")
self.frm_main.SetSize((400, 200))
self.frm_main.Show()
def on_submit(self, event):
self.frm_main.SetTitle(self.txt_title.GetValue())
self.txt_title.SetValue("")
if __name__ == "__main__":
app = SampleApp(False)
app.MainLoop()
}}
基本的な構造はsample_2_2と同じで、見た目の違いはほとん...
* 3. wxGladeによるGUIの構築 [#cf3cb1a7]
** 3.1 wxGladeとは [#xe41ba6f]
これまで見てきたように、テキストエディタだけでも、GUIプ...
今回使用したのはwxGlade v0.6.3です。
wxGladeはGUIコントロールをマウスによるドラッグアンドド...
ソースコードで出力した場合、イベントハンドラなどを追加...
** 3.2 wxGladeの使い方 [#c4fa9b6e]
wxGladeを起動すると、3つのウィンドウが表示されます。
- メインウィンドウ
#ref(wxglade_main.png);
- ツリーウィンドウ
#ref(wxglade_tree.png);
- プロパティウィンドウ
#ref(wxglade_prop.png);
メインウィンドウにはFrameやコントロールなど、配置可能な...
各ウィンドウの具体的な使い方などはこのあと、実際の作業...
** 3.3 ウィンドウを表示する [#qaf0b582]
やはり最初はウィンドウを表示するだけのアプリケーション...
CENTER:&ref(sample_3_3.png);
実行したときの見た目はsample_2_2とほとんど同じです。こ...
wxGladeを起動したら、まずプロパティ画面で以下の基本設定...
- 出力形式をXRCに変更する。
- EncodingをUTF-8に変更する。
- 出力するファイル名を設定する。
CENTER:&ref(sample_3_3_property.png);
基本設定が終わったら、さっそくwx.Frameを追加してみまし...
CENTER:&ref(sample_3_3_select_frame_class.png);
するとツリー画面にframe_1が追加され、新たにデザイン画面...
CENTER:&ref(sample_3_3_tree.png);
ツリー画面に追加されたframe_1を選択すると、プロパティ画...
CENTER:&ref(sample_3_3_property_frame.png);
デザイン画面はここで定義しているウィンドウを表示したと...
CENTER:&ref(sample_3_3_design.png);
ウィンドウタイトルなどの細かい設定はソースコードのほう...
CENTER:&ref(sample_3_3_generate_code.png);
出力したXRCファイルは以下のようになります。
- sample_3_3.xrc
#pre{{
<?xml version="1.0" encoding="UTF-8"?>
<!-- generated by wxGlade 0.6.3 on Wed Nov 16 22:19:37 20...
<resource version="2.3.0.1">
<object class="wxFrame" name="frame_main">
<style>wxDEFAULT_FRAME_STYLE</style>
<title>frame_main</title>
<object class="wxBoxSizer">
<orient>wxVERTICAL</orient>
</object>
</object>
</resource>
}}
sample_3_3.xrcに出力したウィンドウを表示するためのソー...
- sample_3_3.py
#pre{{
import wx
from wx import xrc
XRC_FILE = "sample_3_3.xrc"
class SampleApp(wx.App):
def OnInit(self):
self.res = xrc.XmlResource(XRC_FILE)
self.init_frame()
return True
def init_frame(self):
self.frm_main = self.res.LoadFrame(None, "frame_m...
self.frm_main.SetTitle("sample_3_3")
self.frm_main.SetSize((400, 200))
self.frm_main.Show()
if __name__ == "__main__":
app = SampleApp(False)
app.MainLoop()
}}
まず、8行目でxrc.XmlResourceとして先ほどのXRCファイルを...
** 3.4 コントロールを配置する [#ebafd799]
続いてwxGladeでコントロールを配置する手順を見てみます。...
CENTER:&ref(sample_3_4.png);
コントロールの配置にwx.Sizerが必要なことは先ほど述べま...
続いて、メイン画面から「Add a BoxSizer」を選択し、frame...
CENTER:&ref(sample_3_4_sizer.png);
先ほどと同じようにメイン画面から「Add a TextCtrl」を選...
CENTER:&ref(sample_3_4_design.png);
コントロールのName属性などを設定し、sample_3_4.xrcとし...
- sample_3_4.xrc
#pre{{
<?xml version="1.0" encoding="UTF-8"?>
<!-- generated by wxGlade 0.6.3 on Wed Nov 16 22:15:53 20...
<resource version="2.3.0.1">
<object class="wxFrame" name="frame_main">
<style>wxDEFAULT_FRAME_STYLE</style>
<size>400, 300</size>
<title>main_frame</title>
<object class="wxBoxSizer">
<orient>wxHORIZONTAL</orient>
<object class="sizeritem">
<option>1</option>
<flag>wxALIGN_CENTER_VERTICAL</flag>
<object class="wxTextCtrl" name="text_inp...
</object>
</object>
<object class="sizeritem">
<flag>wxALIGN_CENTER_VERTICAL</flag>
<object class="wxButton" name="button_sub...
<label>Submit</label>
</object>
</object>
</object>
</object>
</resource>
}}
このウィンドウを表示するソースコードですが、リソースを...
- sample_3_4.py
#pre{{
import wx
from wx import xrc
XRC_FILE = "sample_3_4.xrc"
class SampleApp(wx.App):
def OnInit(self):
self.res = xrc.XmlResource(XRC_FILE)
self.init_frame()
return True
def init_frame(self):
self.frm_main = self.res.LoadFrame(None, "frame_m...
self.txt_input = xrc.XRCCTRL(self.frm_main, "text...
self.btn_submit = xrc.XRCCTRL(self.frm_main, "but...
self.frm_main.SetTitle("sample_3_4")
self.frm_main.SetSize((400, 200))
self.frm_main.Show()
if __name__ == "__main__":
app = SampleApp(False)
app.MainLoop()
}}
このようにアプリケーションの動作を変更せずに、コントロ...
** 3.5 イベント処理 [#e92aa44a]
sample_3_4にイベント処理を追加します。動作はsample_2_3...
CENTER:&ref(sample_3_5.png);
GUIの配置には変更がないので、XRCファイルはsample_3_4と...
- sample_3_5.xrc
#pre{{
<?xml version="1.0" encoding="UTF-8"?>
<!-- generated by wxGlade 0.6.3 on Wed Nov 16 22:16:28 20...
<resource version="2.3.0.1">
<object class="wxFrame" name="frame_main">
<style>wxDEFAULT_FRAME_STYLE</style>
<size>400, 300</size>
<title>main_frame</title>
<object class="wxBoxSizer">
<orient>wxHORIZONTAL</orient>
<object class="sizeritem">
<option>1</option>
<flag>wxALIGN_CENTER_VERTICAL</flag>
<object class="wxTextCtrl" name="text_tit...
</object>
</object>
<object class="sizeritem">
<flag>wxALIGN_CENTER_VERTICAL</flag>
<object class="wxButton" name="button_sub...
<label>ChangeTitle</label>
</object>
</object>
</object>
</object>
</resource>
}}
ソースコードは以下のようになっています。
- sample_3_5.py
#pre{{
import wx
from wx import xrc
XRC_FILE = "sample_3_5.xrc"
class SampleApp(wx.App):
def OnInit(self):
self.res = xrc.XmlResource(XRC_FILE)
self.init_frame()
return True
def init_frame(self):
self.frm_main = self.res.LoadFrame(None, "frame_m...
self.txt_title = xrc.XRCCTRL(self.frm_main, "text...
self.btn_submit = xrc.XRCCTRL(self.frm_main, "but...
self.btn_submit.Bind(wx.EVT_BUTTON, self.on_submit)
self.frm_main.SetTitle("sample_3_5")
self.frm_main.SetSize((400, 200))
self.frm_main.Show()
def on_submit(self, event):
self.frm_main.SetTitle(self.txt_title.GetValue())
self.txt_title.SetValue("")
if __name__ == "__main__":
app = SampleApp(False)
app.MainLoop()
}}
コントロールをXRCのリソースから読み込むところが違うだけ...
XRCリソースからコントロールを読み込むにはxrc.XRCCTRL()...
** 3.6 コントロールの配置を変更する [#zcb22311]
GUIの配置情報をXRCに分割することによって、ソースコード...
CENTER:&ref(sample_3_6.png);
wx.BoxSizerの配置方向をHORIZONTALからVERTICALに変更し、...
sample_3_6のXRCファイルは以下のようになっています。
- sample_3_6.xrc
#pre{{
<?xml version="1.0" encoding="UTF-8"?>
<!-- generated by wxGlade 0.6.3 on Fri Nov 25 13:03:14 20...
<resource version="2.3.0.1">
<object class="wxFrame" name="frame_main">
<style>wxDEFAULT_FRAME_STYLE</style>
<size>400, 300</size>
<title>main_frame</title>
<object class="wxBoxSizer">
<orient>wxVERTICAL</orient>
<object class="sizeritem">
<flag>wxALL|wxALIGN_CENTER_VERTICAL</flag>
<border>10</border>
<object class="wxTextCtrl" name="text_tit...
<size>200, 22</size>
</object>
</object>
<object class="sizeritem">
<flag>wxALL|wxALIGN_CENTER_VERTICAL</flag>
<border>10</border>
<object class="wxButton" name="button_sub...
<label>ChangeTitle</label>
</object>
</object>
</object>
</object>
</resource>
}}
ソースコードは以下のようになっています。
- sample_3_6.py
#pre{{
import wx
from wx import xrc
XRC_FILE = "sample_3_6.xrc"
class SampleApp(wx.App):
def OnInit(self):
self.res = xrc.XmlResource(XRC_FILE)
self.init_frame()
return True
def init_frame(self):
self.frm_main = self.res.LoadFrame(None, "frame_m...
self.txt_title = xrc.XRCCTRL(self.frm_main, "text...
self.btn_submit = xrc.XRCCTRL(self.frm_main, "but...
self.btn_submit.Bind(wx.EVT_BUTTON, self.on_submit)
self.frm_main.SetTitle("sample_3_6")
self.frm_main.SetSize((400, 200))
self.frm_main.Show()
def on_submit(self, event):
self.frm_main.SetTitle(self.txt_title.GetValue())
self.txt_title.SetValue("")
if __name__ == "__main__":
app = SampleApp(False)
app.MainLoop()
}}
読み込むXRCファイル名と、起動時のウィンドウタイトルだけ...
このようにGUI配置情報をXRCリソースに分割することで、画...
* 4. py2exeによるexeファイルへの変換 [#p7791178]
** 4.1 py2exeとは [#f7d25b10]
Pythonでウィンドウアプリケーションが作れるようになった...
py2exeというツールを使うと、PythonアプリケーションをWin...
** 4.2 exeファイルへの変換 [#y68afc09]
先ほどのサンプルsample_3_5をexeに変換します。まずpy2exe...
- build.py
#pre{{
from distutils.core import setup
import py2exe
py2exe_options = {
"compressed": 1,
"optimize": 2,
"bundle_files": 2}
setup(
options = {"py2exe": py2exe_options},
windows = [
{"script" : "sample_3_5.py"}],
zipfile = None)
}}
続いてpy2exeを実行するのですが、このとき、py2exeを引数...
- build.bat
#pre{{
build.py py2exe
copy .\msvcp90.dll .\dist\
copy .\sample_3_5.xrc .\dist\
move .\dist .\sample_3_5-bin
rmdir /s /q .\build
}}
build.batと同じフォルダにsample_3_5のソースファイルとXR...
build.batを実行すると、sample_3_5-binフォルダの下にexe...
----
RIGHT:野田
終了行:
目次
#contents
* 1. はじめに [#uad089b6]
** 1.1 概要 [#u6fe2e85]
Pythonは手軽に書けて、本格的なプログラミングにも使える...
動作確認に使用したバージョンは以下のとおりです。
- Python 2.6.6
- wxPython 2.8.11
** 1.2 対象 [#x3549044]
Pythonによる開発経験のある方を対象としています。Python...
** 1.3 wxPythonとは [#tde1a05c]
wxPythonは、Pythonから利用できるGUIツールキットです。そ...
今回はWindows環境で説明していきますが、インストールなど...
* 2. wxPythonを使ってみる [#l34486cd]
** 2.1 ウィンドウを表示する [#wed52250]
では実際にwxPythonでGUIアプリケーションを作ってみましょ...
CENTER:&ref(sample_2_1.jpg);
ソースコードは以下のようになっています。
- sample_2_1.py
#pre{{
import wx
class SampleApp(wx.App):
def OnInit(self):
self.init_frame()
return True
def init_frame(self):
self.frm_main = wx.Frame(None)
self.frm_main.SetTitle("Hello, wxPython!")
self.frm_main.SetSize((400, 200))
self.frm_main.Show()
if __name__ == "__main__":
app = SampleApp(False)
app.MainLoop()
}}
sample_2_1.pyは標準的なwxPythonアプリケーションの雛形で...
まず、wx.Appを継承したSampleAppクラスを定義しています。...
このスクリプトを実行すると、SampleAppのオブジェクトが生...
** 2.2 コントロールを配置する [#je9687ff]
ウィンドウにコントロールをいくつか配置してみましょう。
CENTER:&ref(sample_2_2.jpg);
ソースコードは以下のようになっています。
- sample_2_2.py
#pre{{
import wx
class SampleApp(wx.App):
def OnInit(self):
self.init_frame()
return True
def init_frame(self):
self.frm_main = wx.Frame(None)
self.sizer = wx.BoxSizer()
self.frm_main.SetSizer(self.sizer)
self.txt_title = wx.TextCtrl(self.frm_main)
self.sizer.Add(self.txt_title, 1, wx.ALIGN_CENTER...
self.btn_submit = wx.Button(self.frm_main)
self.btn_submit.SetLabel("Submit")
self.sizer.Add(self.btn_submit, 0, wx.ALIGN_CENTE...
self.frm_main.SetTitle("sample_2_2")
self.frm_main.SetSize((400, 200))
self.frm_main.Show()
if __name__ == "__main__":
app = SampleApp(False)
app.MainLoop()
}}
ウィンドウにwx.TextCtrlとwx.Buttonを配置してみました。w...
CENTER:&ref(sample_2_2_sizer.jpg);
** 2.3 イベント処理 [#y2c41615]
コントロールを操作したときのイベント処理を追加してみま...
CENTER:&ref(sample_2_3.jpg);
ソースコードは以下のようになっています。
- sample_2_3.py
#pre{{
import wx
class SampleApp(wx.App):
def OnInit(self):
self.init_frame()
return True
def init_frame(self):
self.frm_main = wx.Frame(None)
self.sizer = wx.BoxSizer()
self.frm_main.SetSizer(self.sizer)
self.txt_title = wx.TextCtrl(self.frm_main)
self.sizer.Add(self.txt_title, 1, wx.ALIGN_CENTER...
self.btn_submit = wx.Button(self.frm_main)
self.btn_submit.SetLabel("Change Title")
self.btn_submit.Bind(wx.EVT_BUTTON, self.on_submit)
self.sizer.Add(self.btn_submit, 0, wx.ALIGN_CENTE...
self.frm_main.SetTitle("sample_2_3")
self.frm_main.SetSize((400, 200))
self.frm_main.Show()
def on_submit(self, event):
self.frm_main.SetTitle(self.txt_title.GetValue())
self.txt_title.SetValue("")
if __name__ == "__main__":
app = SampleApp(False)
app.MainLoop()
}}
基本的な構造はsample_2_2と同じで、見た目の違いはほとん...
* 3. wxGladeによるGUIの構築 [#cf3cb1a7]
** 3.1 wxGladeとは [#xe41ba6f]
これまで見てきたように、テキストエディタだけでも、GUIプ...
今回使用したのはwxGlade v0.6.3です。
wxGladeはGUIコントロールをマウスによるドラッグアンドド...
ソースコードで出力した場合、イベントハンドラなどを追加...
** 3.2 wxGladeの使い方 [#c4fa9b6e]
wxGladeを起動すると、3つのウィンドウが表示されます。
- メインウィンドウ
#ref(wxglade_main.png);
- ツリーウィンドウ
#ref(wxglade_tree.png);
- プロパティウィンドウ
#ref(wxglade_prop.png);
メインウィンドウにはFrameやコントロールなど、配置可能な...
各ウィンドウの具体的な使い方などはこのあと、実際の作業...
** 3.3 ウィンドウを表示する [#qaf0b582]
やはり最初はウィンドウを表示するだけのアプリケーション...
CENTER:&ref(sample_3_3.png);
実行したときの見た目はsample_2_2とほとんど同じです。こ...
wxGladeを起動したら、まずプロパティ画面で以下の基本設定...
- 出力形式をXRCに変更する。
- EncodingをUTF-8に変更する。
- 出力するファイル名を設定する。
CENTER:&ref(sample_3_3_property.png);
基本設定が終わったら、さっそくwx.Frameを追加してみまし...
CENTER:&ref(sample_3_3_select_frame_class.png);
するとツリー画面にframe_1が追加され、新たにデザイン画面...
CENTER:&ref(sample_3_3_tree.png);
ツリー画面に追加されたframe_1を選択すると、プロパティ画...
CENTER:&ref(sample_3_3_property_frame.png);
デザイン画面はここで定義しているウィンドウを表示したと...
CENTER:&ref(sample_3_3_design.png);
ウィンドウタイトルなどの細かい設定はソースコードのほう...
CENTER:&ref(sample_3_3_generate_code.png);
出力したXRCファイルは以下のようになります。
- sample_3_3.xrc
#pre{{
<?xml version="1.0" encoding="UTF-8"?>
<!-- generated by wxGlade 0.6.3 on Wed Nov 16 22:19:37 20...
<resource version="2.3.0.1">
<object class="wxFrame" name="frame_main">
<style>wxDEFAULT_FRAME_STYLE</style>
<title>frame_main</title>
<object class="wxBoxSizer">
<orient>wxVERTICAL</orient>
</object>
</object>
</resource>
}}
sample_3_3.xrcに出力したウィンドウを表示するためのソー...
- sample_3_3.py
#pre{{
import wx
from wx import xrc
XRC_FILE = "sample_3_3.xrc"
class SampleApp(wx.App):
def OnInit(self):
self.res = xrc.XmlResource(XRC_FILE)
self.init_frame()
return True
def init_frame(self):
self.frm_main = self.res.LoadFrame(None, "frame_m...
self.frm_main.SetTitle("sample_3_3")
self.frm_main.SetSize((400, 200))
self.frm_main.Show()
if __name__ == "__main__":
app = SampleApp(False)
app.MainLoop()
}}
まず、8行目でxrc.XmlResourceとして先ほどのXRCファイルを...
** 3.4 コントロールを配置する [#ebafd799]
続いてwxGladeでコントロールを配置する手順を見てみます。...
CENTER:&ref(sample_3_4.png);
コントロールの配置にwx.Sizerが必要なことは先ほど述べま...
続いて、メイン画面から「Add a BoxSizer」を選択し、frame...
CENTER:&ref(sample_3_4_sizer.png);
先ほどと同じようにメイン画面から「Add a TextCtrl」を選...
CENTER:&ref(sample_3_4_design.png);
コントロールのName属性などを設定し、sample_3_4.xrcとし...
- sample_3_4.xrc
#pre{{
<?xml version="1.0" encoding="UTF-8"?>
<!-- generated by wxGlade 0.6.3 on Wed Nov 16 22:15:53 20...
<resource version="2.3.0.1">
<object class="wxFrame" name="frame_main">
<style>wxDEFAULT_FRAME_STYLE</style>
<size>400, 300</size>
<title>main_frame</title>
<object class="wxBoxSizer">
<orient>wxHORIZONTAL</orient>
<object class="sizeritem">
<option>1</option>
<flag>wxALIGN_CENTER_VERTICAL</flag>
<object class="wxTextCtrl" name="text_inp...
</object>
</object>
<object class="sizeritem">
<flag>wxALIGN_CENTER_VERTICAL</flag>
<object class="wxButton" name="button_sub...
<label>Submit</label>
</object>
</object>
</object>
</object>
</resource>
}}
このウィンドウを表示するソースコードですが、リソースを...
- sample_3_4.py
#pre{{
import wx
from wx import xrc
XRC_FILE = "sample_3_4.xrc"
class SampleApp(wx.App):
def OnInit(self):
self.res = xrc.XmlResource(XRC_FILE)
self.init_frame()
return True
def init_frame(self):
self.frm_main = self.res.LoadFrame(None, "frame_m...
self.txt_input = xrc.XRCCTRL(self.frm_main, "text...
self.btn_submit = xrc.XRCCTRL(self.frm_main, "but...
self.frm_main.SetTitle("sample_3_4")
self.frm_main.SetSize((400, 200))
self.frm_main.Show()
if __name__ == "__main__":
app = SampleApp(False)
app.MainLoop()
}}
このようにアプリケーションの動作を変更せずに、コントロ...
** 3.5 イベント処理 [#e92aa44a]
sample_3_4にイベント処理を追加します。動作はsample_2_3...
CENTER:&ref(sample_3_5.png);
GUIの配置には変更がないので、XRCファイルはsample_3_4と...
- sample_3_5.xrc
#pre{{
<?xml version="1.0" encoding="UTF-8"?>
<!-- generated by wxGlade 0.6.3 on Wed Nov 16 22:16:28 20...
<resource version="2.3.0.1">
<object class="wxFrame" name="frame_main">
<style>wxDEFAULT_FRAME_STYLE</style>
<size>400, 300</size>
<title>main_frame</title>
<object class="wxBoxSizer">
<orient>wxHORIZONTAL</orient>
<object class="sizeritem">
<option>1</option>
<flag>wxALIGN_CENTER_VERTICAL</flag>
<object class="wxTextCtrl" name="text_tit...
</object>
</object>
<object class="sizeritem">
<flag>wxALIGN_CENTER_VERTICAL</flag>
<object class="wxButton" name="button_sub...
<label>ChangeTitle</label>
</object>
</object>
</object>
</object>
</resource>
}}
ソースコードは以下のようになっています。
- sample_3_5.py
#pre{{
import wx
from wx import xrc
XRC_FILE = "sample_3_5.xrc"
class SampleApp(wx.App):
def OnInit(self):
self.res = xrc.XmlResource(XRC_FILE)
self.init_frame()
return True
def init_frame(self):
self.frm_main = self.res.LoadFrame(None, "frame_m...
self.txt_title = xrc.XRCCTRL(self.frm_main, "text...
self.btn_submit = xrc.XRCCTRL(self.frm_main, "but...
self.btn_submit.Bind(wx.EVT_BUTTON, self.on_submit)
self.frm_main.SetTitle("sample_3_5")
self.frm_main.SetSize((400, 200))
self.frm_main.Show()
def on_submit(self, event):
self.frm_main.SetTitle(self.txt_title.GetValue())
self.txt_title.SetValue("")
if __name__ == "__main__":
app = SampleApp(False)
app.MainLoop()
}}
コントロールをXRCのリソースから読み込むところが違うだけ...
XRCリソースからコントロールを読み込むにはxrc.XRCCTRL()...
** 3.6 コントロールの配置を変更する [#zcb22311]
GUIの配置情報をXRCに分割することによって、ソースコード...
CENTER:&ref(sample_3_6.png);
wx.BoxSizerの配置方向をHORIZONTALからVERTICALに変更し、...
sample_3_6のXRCファイルは以下のようになっています。
- sample_3_6.xrc
#pre{{
<?xml version="1.0" encoding="UTF-8"?>
<!-- generated by wxGlade 0.6.3 on Fri Nov 25 13:03:14 20...
<resource version="2.3.0.1">
<object class="wxFrame" name="frame_main">
<style>wxDEFAULT_FRAME_STYLE</style>
<size>400, 300</size>
<title>main_frame</title>
<object class="wxBoxSizer">
<orient>wxVERTICAL</orient>
<object class="sizeritem">
<flag>wxALL|wxALIGN_CENTER_VERTICAL</flag>
<border>10</border>
<object class="wxTextCtrl" name="text_tit...
<size>200, 22</size>
</object>
</object>
<object class="sizeritem">
<flag>wxALL|wxALIGN_CENTER_VERTICAL</flag>
<border>10</border>
<object class="wxButton" name="button_sub...
<label>ChangeTitle</label>
</object>
</object>
</object>
</object>
</resource>
}}
ソースコードは以下のようになっています。
- sample_3_6.py
#pre{{
import wx
from wx import xrc
XRC_FILE = "sample_3_6.xrc"
class SampleApp(wx.App):
def OnInit(self):
self.res = xrc.XmlResource(XRC_FILE)
self.init_frame()
return True
def init_frame(self):
self.frm_main = self.res.LoadFrame(None, "frame_m...
self.txt_title = xrc.XRCCTRL(self.frm_main, "text...
self.btn_submit = xrc.XRCCTRL(self.frm_main, "but...
self.btn_submit.Bind(wx.EVT_BUTTON, self.on_submit)
self.frm_main.SetTitle("sample_3_6")
self.frm_main.SetSize((400, 200))
self.frm_main.Show()
def on_submit(self, event):
self.frm_main.SetTitle(self.txt_title.GetValue())
self.txt_title.SetValue("")
if __name__ == "__main__":
app = SampleApp(False)
app.MainLoop()
}}
読み込むXRCファイル名と、起動時のウィンドウタイトルだけ...
このようにGUI配置情報をXRCリソースに分割することで、画...
* 4. py2exeによるexeファイルへの変換 [#p7791178]
** 4.1 py2exeとは [#f7d25b10]
Pythonでウィンドウアプリケーションが作れるようになった...
py2exeというツールを使うと、PythonアプリケーションをWin...
** 4.2 exeファイルへの変換 [#y68afc09]
先ほどのサンプルsample_3_5をexeに変換します。まずpy2exe...
- build.py
#pre{{
from distutils.core import setup
import py2exe
py2exe_options = {
"compressed": 1,
"optimize": 2,
"bundle_files": 2}
setup(
options = {"py2exe": py2exe_options},
windows = [
{"script" : "sample_3_5.py"}],
zipfile = None)
}}
続いてpy2exeを実行するのですが、このとき、py2exeを引数...
- build.bat
#pre{{
build.py py2exe
copy .\msvcp90.dll .\dist\
copy .\sample_3_5.xrc .\dist\
move .\dist .\sample_3_5-bin
rmdir /s /q .\build
}}
build.batと同じフォルダにsample_3_5のソースファイルとXR...
build.batを実行すると、sample_3_5-binフォルダの下にexe...
----
RIGHT:野田
ページ名:
BC::labsへの質問は、bc9-dev @ googlegroups.com までお願い致します。