wxPythonとXRCedでGUIプログラム(簡易ブラウザ)

wxPythonを使うとGUIがそれなりに簡単に使えて、付属しているXRCedを利用するとGUIを使って画面設計ができる。
ただし、XRCedで作成したxrcというXMLを使用するにはそれを使用するためのスクリプトを作らなければいけず、覚えるのめんどいとか思ってしばらく使ってなかった。
しかし、GUIなしプログラムを人に使わせるのはどうかということでおさらいしてみた。
前に調べたときより簡単になってる。。。気がした。

前準備

をインストール

画面を作る

単純設計。機能なんて期待するな

  • XML tree(encoding=utf-8)
    • wxFrameを配置
      • wxPanelを配置
        • wxBoxSizerを配置(Vertical)
          • wxHtmlWindowを配置(XMLID=html1,proporttion=1,flag=wxEXPAND)
          • wxBoxSizerを配置(Horizontal)
            • wxTextCtrlを配置(XMLID=edit1,proportion=1,wxEXPAND)
            • wxButtonを配置(XMLID=button1)

その他初期値や見た目はFREEDOM
できたらhtml.xrcとして保存して、Generate Pythonする。
以下ソース

<?xml version="1.0" encoding="utf-8"?>
<resource>
  <object class="wxFrame" name="FRAME1">
    <title></title>
    <object class="wxPanel">
      <object class="wxBoxSizer">
        <orient>wxVERTICAL</orient>
        <object class="sizeritem">
          <object class="wxHtmlWindow" name="html1">
            <style>wxHW_SCROLLBAR_AUTO|wxSIMPLE_BORDER</style>
            <htmlcode><html><boby><a href="hellohttp://www.google.co.jp/">hello>
          </object>
          <option>1</option>
          <flag>wxEXPAND</flag>
        </object>
        <object class="sizeritem">
          <object class="wxBoxSizer">
            <orient>wxHORIZONTAL</orient>
            <object class="sizeritem">
              <object class="wxTextCtrl" name="edit1">
                <style>wxSIMPLE_BORDER</style>
              </object>
              <option>1</option>
              <flag>wxEXPAND</flag>
            </object>
            <object class="sizeritem">
              <object class="wxButton" name="button1">
                <label>BUTTON</label>
              </object>
              <border>1</border>
            </object>
          </object>
          <flag>wxEXPAND</flag>
        </object>
      </object>
    </object>
    <style>wxDEFAULT_FRAME_STYLE|wxSIMPLE_BORDER</style>
  </object>
</resource>

プログラムを作る

やることは2つ。便利になんて作らない

  1. xrcを読み込んで画面を表示する
  2. ボタンを押されたらテキストボックスの内容をHTMLとして表示する
#!/usr/bin/local/python
# -*- coding: utf-8 -*-

import wx
from wx import xrc
import html_xrc
import wx.html

class MyApp(wx.App):
  def OnInit(self):
    self.frame = html_xrc.xrcFRAME1(None)
    self.init_frame()
    self.frame.Show()
    return True

  def init_frame(self):
    self.frame.Bind(wx.EVT_BUTTON, self.OnButton, id=xrc.XRCID('button1'))

  def OnButton(self, evt):
    edit1 = xrc.XRCCTRL(self.frame,'edit1')
    value = edit1.GetValue()
    html1 = xrc.XRCCTRL(self.frame,'html1')
    html1.SetPage(value)

# startup application.
if __name__=='__main__':
  app = MyApp(False)
  app.MainLoop() 
簡単な説明
  • OnInit

生成されたpyからxrcを読み込む。そして画面表示。

  • init_frame

ボタンにメソッドを割り当てる

  • OnButton

edit1から値を取得してhtmlとして表示する

  • __main__

GUIプログラムをスタートする

  • import wx.html

これが無いとなぜかxrc.XRCCTRL(self.frame,'html1')でNoneを返す。

使い方

テキストボックスに

<a href="http://tino9000.tumblr.com/">リンク</a>

などと入力してリンクをクリックするとそのページにいける。
javascriptとかcssとか有効にならない。