<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
		xmlns:xhtml="http://www.w3.org/1999/xhtml"
>

<channel>
	<title>エスブレイン &#187; python</title>
	<atom:link href="http://www.esbrain.com/category/%e3%83%97%e3%83%ad%e3%82%b0%e3%83%a9%e3%83%a0%e5%b0%8f%e6%8a%80/python-%e3%83%97%e3%83%ad%e3%82%b0%e3%83%a9%e3%83%a0%e5%b0%8f%e6%8a%80/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.esbrain.com</link>
	<description>高い技術力・創造力・機動力でお客様のビジネスをさらに加速させます</description>
	<lastBuildDate>Wed, 25 Aug 2010 07:34:27 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://www.esbrain.com/category/%e3%83%97%e3%83%ad%e3%82%b0%e3%83%a9%e3%83%a0%e5%b0%8f%e6%8a%80/python-%e3%83%97%e3%83%ad%e3%82%b0%e3%83%a9%e3%83%a0%e5%b0%8f%e6%8a%80/feed/" />
		<item>
		<title>WebMapServiceでGIS</title>
		<link>http://www.esbrain.com/2009/05/webmapservice%e3%81%a7gis/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=rss</link>
		<comments>http://www.esbrain.com/2009/05/webmapservice%e3%81%a7gis/#comments</comments>
		<pubDate>Fri, 22 May 2009 07:14:21 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[python]]></category>
		<category><![CDATA[プログラム小技]]></category>

		<guid isPermaLink="false">http://www.esbrain.com/?p=499</guid>
		<description><![CDATA[GoogleMapのような地図のレンダリング機能が欲しくなりました。
しかもPythonで。
検索するとすぐ発見。
OwsLib。
インストールも簡単
sudo easy_install OWSLib

ちなみに、eas [...]]]></description>
			<content:encoded><![CDATA[<p>GoogleMapのような地図のレンダリング機能が欲しくなりました。</p>
<p>しかもPythonで。</p>
<p>検索するとすぐ発見。</p>
<p>OwsLib。</p>
<p>インストールも簡単</p>
<pre>sudo easy_install OWSLib
</pre>
<p>ちなみに、easy_installが使えない人は、先に以下のコマンドを実行。(Ubuntuでの話)</p>
<pre>sudo apt-get install python-setuptools
</pre>
<p>さて、OWSLibの公式サイトに書いてあるスクリプトをチョロッと改造して、</p>
<p>東京近辺の地図を出してみました。</p>
<p>nasaが持っている地図から取得。</p>
<pre class="brush: python;">
#!/usr/bin/env python
# -*- coding:UTF-8 -*-

from owslib.wms import WebMapService
wms = WebMapService(&quot;http://wms.jpl.nasa.gov/wms.cgi&quot;, version=&quot;1.1.1&quot;)
img = wms.getmap(       layers=['global_mosaic'],
                        styles=['visual_bright'],
                        srs='EPSG:4326',
                        bbox=(139.25, 35.25, 140.25, 36.25),
                        size=(640, 640),
                        format='image/jpeg',
                        transparent=True
                        )
out = open('tokyo_1.jpg', 'wb')
out.write(img.read())
out.close()
</pre>
<p>実行すると、tokyo_2.jpgファイルが作成されます。</p>
<p>こんな感じ。</p>
<p style="text-align: center;"><a rel="lightbox" href="http://www.esbrain.com/wp-content/uploads/tokyo_1.jpg" title="tokyo_1" rel="lightbox[499]"><img class="aligncenter size-thumbnail wp-image-508" title="tokyo_1" src="http://www.esbrain.com/wp-content/uploads/tokyo_1-150x150.jpg" alt="tokyo_1" width="150" height="150" /></a></p>
<p>簡単ですね。</p>
<p>WMSのサイトを変えて、日本の国土地理院の行政区画の区分地図を取得。</p>
<pre class="brush: python;">
#!/usr/bin/env python
# -*- coding:UTF-8 -*-

from owslib.wms import WebMapService
wms = WebMapService(&quot;http://www.finds.jp/ws/kiban25000wms.cgi&quot;, version=&quot;1.1.1&quot;)
img = wms.getmap(       layers=['AdmArea'],
                        srs='EPSG:4326',
                        bbox=(139.25, 35.25, 140.25, 36.25),
                        size=(640, 640),
                        format='image/jpeg',
                        transparent=True
                        )
out = open('tokyo_2.jpg', 'wb')
out.write(img.read())
out.close()
</pre>
<p style="text-align: center;"><a rel="lightbox" href="http://www.esbrain.com/wp-content/uploads/tokyo_2.jpg" title="tokyo_2" rel="lightbox[499]"><img class="aligncenter size-thumbnail wp-image-509" title="tokyo_2" src="http://www.esbrain.com/wp-content/uploads/tokyo_2-150x150.jpg" alt="tokyo_2" width="150" height="150" /></a></p>
<p>これも簡単。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.esbrain.com/2009/05/webmapservice%e3%81%a7gis/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://www.esbrain.com/2009/05/webmapservice%e3%81%a7gis/" />
	</item>
		<item>
		<title>pythonで画像表示</title>
		<link>http://www.esbrain.com/2009/04/python%e3%81%a7%e7%94%bb%e5%83%8f%e8%a1%a8%e7%a4%ba/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=rss</link>
		<comments>http://www.esbrain.com/2009/04/python%e3%81%a7%e7%94%bb%e5%83%8f%e8%a1%a8%e7%a4%ba/#comments</comments>
		<pubDate>Thu, 30 Apr 2009 09:15:55 +0000</pubDate>
		<dc:creator>yokoyama</dc:creator>
				<category><![CDATA[python]]></category>

		<guid isPermaLink="false">http://www.esbrain.com/?p=446</guid>
		<description><![CDATA[pythonのGUIモジュールであるpygtkを使うと、簡単にウィンドウアプリケーションが作成できます。
しかもRADツールであるgladeインターフェース・デザイナを使えば、GUIの構成もサクサクです。
ということで、 [...]]]></description>
			<content:encoded><![CDATA[<p>pythonのGUIモジュールであるpygtkを使うと、簡単にウィンドウアプリケーションが作成できます。</p>
<p>しかもRADツールであるgladeインターフェース・デザイナを使えば、GUIの構成もサクサクです。</p>
<p>ということで、指定した画像を表示するアプリケーションを作ってみます。</p>
<p>環境はpythonとpygtkが動けばOKです。</p>
<p>まずは、pythonのコードです。</p>
<p>simage.pyファイルとして、保存して下さい。</p>
<pre class="brush: python;">
#! /usr/bin/env python
# -*- coding: UTF-8 -*-

# インポート
import pygtk
pygtk.require(&quot;2.0&quot;)
import gtk
import gtk.glade

# メインウィンドウクラスの定義
class MainWindow:

 # コンストラクタ
 def __init__(self):
 # gladeファイルから一発でGUIを構築
 self.widgets = gtk.glade.XML(&quot;simage.glade&quot;, &quot;window&quot;)

 # イベントハンドラの割り当て
 self.auto_connects()

 # GtkImageをscrolledwindowに追加する
 self.image = gtk.Image()
 self[&quot;scrolledwindow&quot;].add_with_viewport(self.image)

 # MainWindowを表示する
 self[&quot;window&quot;].show_all()

 # イベントハンドラの追加(gtk_ではじまるメソッドを登録)
 def auto_connects(self):
 event_handlers = {}
 for (itemname, value) in self.__class__.__dict__.items():
 if callable(value) and itemname.startswith('gtk_'):
 event_handlers[itemname[4:]] = getattr(self, itemname)
 self.widgets.signal_autoconnect(event_handlers)

 # 指定されたアイテムが見つからない時に呼び出す(widgetの呼び出しを簡単にする)
 def __getitem__(self, key):
 return self.widgets.get_widget(key)

 # ウィンドウの「閉じる」ボタンを押したときのイベントハンドラ
 def gtk_on_window_delete_event(self, widget, event=None):
 gtk.main_quit()

 # メニューの「終了」を選んだときのイベントハンドラ
 def gtk_on_quit_menu_item_activate(self, widget):
 gtk.main_quit()

 # メニューの「開く」を選んだときのイベントハンドラ
 def gtk_on_open_menu_item_activate(self, widget):
 dlg = gtk.FileChooserDialog(
 &quot;画像を開く&quot;,
 None,
 gtk.FILE_CHOOSER_ACTION_OPEN,
 (
 gtk.STOCK_CANCEL,
 gtk.RESPONSE_CANCEL,
 gtk.STOCK_OPEN,gtk.RESPONSE_OK
 )
 )
 dlg.set_default_response(gtk.RESPONSE_OK)

 # 画像ファイルのフィルタを作る
 filter = gtk.FileFilter()
 filter.set_name(&quot;Images&quot;)
 filter.add_mime_type(&quot;image/jpeg&quot;)
 filter.add_mime_type(&quot;image/gif&quot;)
 filter.add_mime_type(&quot;image/png&quot;)
 filter.add_pattern(&quot;*.jpg&quot;)
 filter.add_pattern(&quot;*.gif&quot;)
 filter.add_pattern(&quot;*.png&quot;)
 dlg.add_filter(filter)

 # すべてのファイルのフィルタも作る
 filter = gtk.FileFilter()
 filter.set_name(&quot;All files&quot;)
 filter.add_pattern(&quot;*&quot;)
 dlg.add_filter(filter)

 # ダイアログの表示
 res = dlg.run()

 # 「OK」ボタンを押したら、画像ファイルを開く
 if res == gtk.RESPONSE_OK:
 self.open_image(dlg.get_filename())

 # ダイアログの破棄
 dlg.destroy()

 # 指定された画像を開く
 def open_image( self, filename ):
 self.image.set_from_file(filename)

# スタートアップ
if __name__ == &quot;__main__&quot;:
 window = MainWindow()
 gtk.main()
</pre>
<p>続いて、gladeファイルです。</p>
<p>simage.gladeファイルとして保存して下さい。</p>
<pre class="brush: xml;">
&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;
&lt;!DOCTYPE glade-interface SYSTEM &quot;glade-2.0.dtd&quot;&gt;
&lt;!--Generated with glade3 3.4.5 on Thu Apr 30 17:55:07 2009 --&gt;
&lt;glade-interface&gt;
  &lt;widget class=&quot;GtkWindow&quot; id=&quot;window&quot;&gt;
    &lt;property name=&quot;events&quot;&gt;GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK&lt;/property&gt;
    &lt;property name=&quot;title&quot; translatable=&quot;yes&quot;&gt;Simple Image Viewer&lt;/property&gt;
    &lt;property name=&quot;default_width&quot;&gt;350&lt;/property&gt;
    &lt;property name=&quot;default_height&quot;&gt;350&lt;/property&gt;
    &lt;signal name=&quot;destroy&quot; handler=&quot;on_window_destroy&quot;/&gt;
    &lt;signal name=&quot;delete_event&quot; handler=&quot;on_window_delete_event&quot;/&gt;
    &lt;child&gt;
      &lt;widget class=&quot;GtkVBox&quot; id=&quot;vbox1&quot;&gt;
        &lt;property name=&quot;visible&quot;&gt;True&lt;/property&gt;
        &lt;property name=&quot;events&quot;&gt;GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK&lt;/property&gt;
        &lt;child&gt;
          &lt;widget class=&quot;GtkMenuBar&quot; id=&quot;menubar1&quot;&gt;
            &lt;property name=&quot;visible&quot;&gt;True&lt;/property&gt;
            &lt;property name=&quot;events&quot;&gt;GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK&lt;/property&gt;
            &lt;child&gt;
              &lt;widget class=&quot;GtkMenuItem&quot; id=&quot;menuitem1&quot;&gt;
                &lt;property name=&quot;visible&quot;&gt;True&lt;/property&gt;
                &lt;property name=&quot;events&quot;&gt;GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK&lt;/property&gt;
                &lt;property name=&quot;label&quot; translatable=&quot;yes&quot;&gt;ファイル(_F)&lt;/property&gt;
                &lt;property name=&quot;use_underline&quot;&gt;True&lt;/property&gt;
                &lt;child&gt;
                  &lt;widget class=&quot;GtkMenu&quot; id=&quot;menu1&quot;&gt;
                    &lt;property name=&quot;visible&quot;&gt;True&lt;/property&gt;
                    &lt;property name=&quot;events&quot;&gt;GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK&lt;/property&gt;
                    &lt;child&gt;
                      &lt;widget class=&quot;GtkImageMenuItem&quot; id=&quot;open_menu_item&quot;&gt;
                        &lt;property name=&quot;visible&quot;&gt;True&lt;/property&gt;
                        &lt;property name=&quot;events&quot;&gt;GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK&lt;/property&gt;
                        &lt;property name=&quot;label&quot; translatable=&quot;yes&quot;&gt;開く(_O)&lt;/property&gt;
                        &lt;property name=&quot;use_underline&quot;&gt;True&lt;/property&gt;
                        &lt;signal name=&quot;activate&quot; handler=&quot;on_open_menu_item_activate&quot;/&gt;
                        &lt;child internal-child=&quot;image&quot;&gt;
                          &lt;widget class=&quot;GtkImage&quot; id=&quot;menu-item-image2&quot;&gt;
                            &lt;property name=&quot;stock&quot;&gt;gtk-open&lt;/property&gt;
                          &lt;/widget&gt;
                        &lt;/child&gt;
                      &lt;/widget&gt;
                    &lt;/child&gt;
                    &lt;child&gt;
                      &lt;widget class=&quot;GtkSeparatorMenuItem&quot; id=&quot;separatormenuitem1&quot;&gt;
                        &lt;property name=&quot;visible&quot;&gt;True&lt;/property&gt;
                        &lt;property name=&quot;events&quot;&gt;GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK&lt;/property&gt;
                      &lt;/widget&gt;
                    &lt;/child&gt;
                    &lt;child&gt;
                      &lt;widget class=&quot;GtkImageMenuItem&quot; id=&quot;quit_menu_item&quot;&gt;
                        &lt;property name=&quot;visible&quot;&gt;True&lt;/property&gt;
                        &lt;property name=&quot;events&quot;&gt;GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK&lt;/property&gt;
                        &lt;property name=&quot;label&quot; translatable=&quot;yes&quot;&gt;終了(_Q)&lt;/property&gt;
                        &lt;property name=&quot;use_underline&quot;&gt;True&lt;/property&gt;
                        &lt;signal name=&quot;activate&quot; handler=&quot;on_quit_menu_item_activate&quot;/&gt;
                        &lt;child internal-child=&quot;image&quot;&gt;
                          &lt;widget class=&quot;GtkImage&quot; id=&quot;menu-item-image5&quot;&gt;
                            &lt;property name=&quot;stock&quot;&gt;gtk-quit&lt;/property&gt;
                          &lt;/widget&gt;
                        &lt;/child&gt;
                      &lt;/widget&gt;
                    &lt;/child&gt;
                  &lt;/widget&gt;
                &lt;/child&gt;
              &lt;/widget&gt;
            &lt;/child&gt;
          &lt;/widget&gt;
          &lt;packing&gt;
            &lt;property name=&quot;expand&quot;&gt;False&lt;/property&gt;
          &lt;/packing&gt;
        &lt;/child&gt;
        &lt;child&gt;
          &lt;widget class=&quot;GtkScrolledWindow&quot; id=&quot;scrolledwindow&quot;&gt;
            &lt;property name=&quot;visible&quot;&gt;True&lt;/property&gt;
            &lt;property name=&quot;can_focus&quot;&gt;True&lt;/property&gt;
            &lt;property name=&quot;events&quot;&gt;GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK&lt;/property&gt;
            &lt;property name=&quot;border_width&quot;&gt;1&lt;/property&gt;
            &lt;property name=&quot;hscrollbar_policy&quot;&gt;GTK_POLICY_AUTOMATIC&lt;/property&gt;
            &lt;property name=&quot;vscrollbar_policy&quot;&gt;GTK_POLICY_AUTOMATIC&lt;/property&gt;
            &lt;property name=&quot;shadow_type&quot;&gt;GTK_SHADOW_ETCHED_IN&lt;/property&gt;
            &lt;child&gt;
              &lt;placeholder/&gt;
            &lt;/child&gt;
          &lt;/widget&gt;
          &lt;packing&gt;
            &lt;property name=&quot;position&quot;&gt;1&lt;/property&gt;
          &lt;/packing&gt;
        &lt;/child&gt;
        &lt;child&gt;
          &lt;widget class=&quot;GtkStatusbar&quot; id=&quot;statusbar&quot;&gt;
            &lt;property name=&quot;visible&quot;&gt;True&lt;/property&gt;
            &lt;property name=&quot;events&quot;&gt;GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK&lt;/property&gt;
            &lt;property name=&quot;spacing&quot;&gt;2&lt;/property&gt;
          &lt;/widget&gt;
          &lt;packing&gt;
            &lt;property name=&quot;expand&quot;&gt;False&lt;/property&gt;
            &lt;property name=&quot;position&quot;&gt;2&lt;/property&gt;
          &lt;/packing&gt;
        &lt;/child&gt;
      &lt;/widget&gt;
    &lt;/child&gt;
  &lt;/widget&gt;
&lt;/glade-interface&gt;
 </pre>
<p>このgladeファイルは、gladeインターフェース・デザイナver3で作成しましたので、そのまま読み込むことができます。</p>
<p>よって、このXMLファイルは理解していなくても、gtkモジュールが勝手に解釈してくれます。</p>
<p>pythonコードをみると、22行目でGtkImageをロードしています。</p>
<p>gladeインターフェース・デザイナにもGtkImageはありますので、そこで設置しておけば良いはず。</p>
<p>しかし、設置して実行してみると、gladeの初期化(16行目)で警告が表示され、<br />
ウィンドウのスクロールが正常に動作しませんでした。</p>
<blockquote><p>./simage.py:16: GtkWarning: gtk_scrolled_window_add(): cannot add non scrollable widget use gtk_scrolled_window_add_with_viewport() instead<br />
  self.widgets = gtk.glade.XML(&#8220;simage.glade&#8221;, &#8220;window&#8221;)</p></blockquote>
<p>とりあえず、プログラムでGtkImageを設置すると大丈夫です。</p>
<p>ということで、100行も書かずに画像ビューワが完成です。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.esbrain.com/2009/04/python%e3%81%a7%e7%94%bb%e5%83%8f%e8%a1%a8%e7%a4%ba/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://www.esbrain.com/2009/04/python%e3%81%a7%e7%94%bb%e5%83%8f%e8%a1%a8%e7%a4%ba/" />
	</item>
	</channel>
</rss>
