【コラム】
第9回は、オブジェクト指向のスクリプト言語であるPythonを使ってみましょう。PythonのHello Worldは、リスト1のようにprintを使って記述すればOKです。文字列の最後に改行コードを付ける必要はありません。Pythonの文字列は、Perl等とは違って、シングルクォートで囲んでもダブルクォートで囲んでも同じ意味になり、どちらも、文字列中の「\」は特別な意味で解釈されます。
#!/usr/bin/python ← Pythonスクリプトであることを指定
print 'Hello World' ← printを使ってメッセージ出力(改行コードは不要)
Pythonスクリプトは、実行例1のようにchmodコマンドで実行属性を付ければ実行できます。Pythonスクリプトに拡張子を付ける場合は.pyを付けますが、本稿ではコマンド名だけをタイプして実行できるように拡張子は付けません。
$ chmod +x python_print ← Pythonスクリプトに実行属性を付ける
$ ./python_print ← Pythonスクリプトを実行
Hello World ← 確かにHello Worldが表示される
$ ← シェルのプロンプトに戻る
なお、Pythonのプログラムの書式は、C言語やPerlなどとは違ってフリーフォーマットではなく、インデント(字下げ)によってブロック構造を表現します。このため、プログラムはブロックごとにインデント位置を揃えて記述する必要があります。ただし、本稿のHello Worldのような簡単なプログラムの場合、それが問題になる箇所はほとんどありません。
また、Pythonではオブジェクト指向のクラスを使った記述が可能ですが、本稿のプログラムではクラスを使わずに記述しています。
標準出力に対するwriteメソッドを使ってHello Worldを出力することもできます(リスト2)。この場合、標準出力を表すsys.stdoutを使用するため、sysモジュールのインポートが必要です。また、printとは違って改行コード(\n)も付ける必要があります。
#!/usr/bin/python
import sys ← sysモジュールをインポートする
sys.stdout.write('Hello World\n') ← 標準出力に対してwriteメソッドを実行
コマンドラインに直接Pythonのプログラムを記述する場合は、「-c」オプションを使います(実行例2)。ここでは、シェル上のシングルクォートと、Pythonプログラム内のダブルクォートとで、クォートがニ重になっています。
$ python -c 'print "Hello World"' ← pythonコマンドを直接実行
Hello World ← 確かにHello Worldが表示される
$ ← シェルのプロンプトに戻る
PythonからOSのコマンドを呼び出すには、リスト3のようにosモジュールをインポートしてから、systemメソッドを使います。ここでは、echoコマンドを実行してHello Worldを表示させています。
#!/usr/bin/python
import os ← osモジュールをインポートする
os.system('echo "Hello World"') ← OS上(シェル上)のechoコマンドを実行
Pythonのモジュールの中には、各種GUIツールキットも存在します。これらのうちの1つを使えば、PythonでGUIのプログラムが作成できます。
まずはTkinterを使ってみましょう。Tkinterは、Pythonに標準で付属している、Tcl/Tkベースのモジュールです。TkinterによるHello Worldはリスト4のとおりです。実行時の画面は図1です。ここでは、「from Tkinter import *」の形式でインポートしていることに注意してください。もし「import Tkinter」でインポートした場合は、「Label()」ではなく「Tkinter.Label()」のように、適宜「Tkinter.」を頭に付けて記述する必要があります。
なお、以降のGUIのプログラムには終了ボタン等がありませんので、ウィンドウマネージャのメニューなどを使って終了させてください。
#!/usr/bin/python
from Tkinter import * ← Tkinterをインポート
tk = Tk() ← トップレベルウィンドウを作成
label = Label(tk, text='Hello World', width=22, height=5) ← ラベルを作成
label.pack() ← ラベルを配置する
tk.mainloop() ← メインループを実行
|
|
図1 Tkinterを使ったHello World |
次はPyGTKです。PyGTKはGTK+ベースのモジュール(モジュール名はgtk)です(リスト5、図2)。ウィンドウ破棄時に正常終了するため、destroyシグナルにはハンドラを設定する必要があります。
#!/usr/bin/python
from gtk import * ← gtkモジュールをインポート
def destroy(*args): ← ウィンドウ破棄時に呼び出される
main_quit() ← PyGTKを終了する
window = Window(WINDOW_TOPLEVEL) ← トップレベルウィンドウを作成
window.connect('destroy', destroy) ← destroyシグナルに対するハンドラを指定
label = Label('Hello World') ← 文字列を指定してラベルを作成
label.set_size_request(160, 80) ← ラベルのサイズを指定
window.add(label) ← ウィンドウにラベルを張り付ける
window.show_all() ← すべてを可視状態にする
main() ← メインループを実行
|
|
図2 PyGTKを使ったHello World |
本稿の最後はPyQtです。PyQtはQtベースのモジュール(モジュール名はqt)です(リスト6、図3)。コマンドライン引数のsys.argvを受け渡すため、「import sys」を記述していますが、必要ない場合は、「QApplication(sys.argv)」のところを「QApplication([])」と記述すれば、「import sys」を省略できます。
#!/usr/bin/python
import sys ← sys.argvを使うため
from qt import * ← qtモジュールをインポート
app = QApplication(sys.argv) ← Qtの初期化
window = QWidget() ← ウィジェットwindowを作成
window.resize(160, 80) ← windowのサイズを指定
label = QLabel('Hello World', window) ← windowを親としてしてラベルを作成
label.setGeometry(50, 0, 160, 80) ← ほぼ中央に文字列を配置
app.setMainWidget(window) ← windowをメインウィジェットする
window.show() ← windowを可視状態にする
app.exec_loop() ← メインループを実行
|
|
図3 PyQtを使ったHello World |
| 理研、脳・脊髄形成に必要な神経板湾曲の仕組みを解明 [20:16 5/25] |
| 京大、「慢性閉塞性肺疾患」患者の労作時呼吸困難は鍼治療が有効と実証 [20:08 5/25] |
| 120Hz SHVカメラ用イメージセンサーを使った撮像装置 - SHVフルスペック化へ [18:10 5/25] |
| 京大、視覚による物体認知は前頭前野からのトップダウン信号が重要と確認 [17:45 5/25] |
| 製品数の拡大だけでなくBCPの展開なども含めた総合力で事業の強化を図るTI [17:25 5/25] |
|
【連載】これだけは要チェック! TOEIC(R)単語帳 第108回 今回のお題は…「issue」 [20:00 5/27] キャリア |
|
TVアニメ『ペルソナ4』、新規カットを加えた再編集版を劇場でイベント上映 [20:00 5/27] ホビー |
|
[9nine]制服姿見納め? セーラー服で登場も川島海荷「4人はコスプレ」 [19:15 5/27] エンタメ |
|
「NO.6」4巻は書き下ろしドラマCD付、木乃のサイン会も [18:49 5/27] ホビー |
|
[今週の新刊]マンガ大賞3回ノミネート「アイアムアヒーロー」 カープ愛「球場ラヴァーズ」も [18:33 5/27] ホビー |
4つの診断で、自分の適性を見つめなおそう!
働くこと・挑戦し続けることへの思いを綴ったインタビュー
あなたにピッタリのアドバイスを読むことができます。
転職に必要な情報が収集できます
企業からアプローチのメッセージが届きます。