Pythontkinter 練習01入門的な簡単な練習
田中義文さんの「Python GUI入門 —Tkinter からPIL まで—」をテキストにして,tkinterをつかったGUIの練習を行います.これは大変優れたテキストなので,一読を勧めます.
目次
はじめに
PythonのプログラムもTk(tkinter)も初めてなので,いろいろと間違ったことも書いてあると思います.筆者が勉強したことのメモだと考えてください.
田中義文さんの「Python GUI入門 —Tkinter からPIL まで—」をテキストの通りに練習を行いますが,一部プログラムを変更しています.わかりやすくするために,コメント文の追加や変数名の変更を行っています.また,Python ver 3で実行できるように変えています.
ここで載せているプログラムは,Linux(Ubuntu)で実行の確認を行っています.また,Windowsで実行させるためのプログラムも,リストのキャプション中にリンクを張っています.Linux版とWindows版の違いは,次表の通りです.もちろん,使っているPCの環境に依存して,変えなくてはならないかもしれません.シェバングは Pythonの実行ファイルのあるディレクトリー,エンコーディングはソースファイルの文字コードです.Windowsの文字コードで,シフトJISの拡張となっています.
Linx版とWindows版の違い.
|
Linux版 |
Windows版 |
シェバング |
#!/usr/bin/python3 |
(記述不要) |
エンコーディング |
# -*- coding:euc-jp -*- |
# -*- coding: cp932 -*- |
GUIの練習
ボタンと関数
プログラム
以下の実行結果に示す終了と書かれたボタンがあるウインドウをつくります.このボタンを押すと,プログラムは終了し,ウインドウは消えます.
リスト 1 にプログラムを示します.
ボタンを一つ表示し,それを押すと終了するプログラム(sample01A.py).Windows版は,こちら. |
実行結果 |
001 #!/usr/bin/python3
002 # -*- coding:euc-jp -*-
003
004 import tkinter as tk
005
006 #=======================================
007 # クラスの定義
008 #=======================================
009 class one_button(tk.Frame):
010 # クラス初期設定
011 def __init__(self, master=None):
012 tk.Frame.__init__(self, master)
013 # クラスウィジェット作成
014 f=tk.Frame(master,bg='red', bd=10)
015 f.pack()
016 b=tk.Button(f, text='終了', command=self.goout)
017 b.pack()
018
019 def goout(self):
020 print('終了')
021 exit()
022
023 #=======================================
024 # メインプログラム
025 #=======================================
026 if __name__ == '__main__':
027 g=one_button()
028 g.mainloop()
|
|
解説
行番号 |
動作の説明 |
001 |
Python の実行ファイルのパスの指定. |
002 |
ソースコードの文字コードを指定しています. |
004 |
GUIのパッケージ tkinter を取り込んでいます.取り込んだモジュールは,as tk で,ローカルな名前 tk として使うことができます.as を使わなかった場合,009行目などは「tkinter.Frame 」というように長ったらしい名前を使わなくてはなりません. |
009 |
tkinterのウィジェットFrameを継承した one_button というクラスの定義の開始. |
011 |
__init__ 関数は,C++のコンストラクターのようなもの.self はC++のthisポインターと同じか(?).masterという変数のデフォルトは,Noneとしています. |
012 |
Frameウィジェットの初期化を行っています. |
014 |
Frameウィジェットの値を設定しています.第一引数は,親ウィジェットです.ここでは,親がないので,Noneとしている(?).bg(backgroundと同じ)で背景色を指定しています.bd(borderwidthと同じ)は,フレーム境界の幅(単位ピクセル)の指定です. |
015 |
Frameウィジェットを配置します. |
016 |
Buttonウィジェットを作成します.その親ウィジェットはf,すなわち,先ほど作成した Frameです.第二引数はボタンのテキストと,第三引数はそれが押された場合に実行する関数を与えています. |
017 |
Buttonウィジェットを配置します. |
019 |
クラスの関数(メソッド)の定義の開始です. |
026 |
このプログラムが,Pythonスクリプトとして実行されたとき,変数__name__ に'__main__ 'が格納される(と書いてあった).となると,無くても良いのか?.026行を削って,027と028のインデントをなくすと,同じ実行結果が得られる.026行があると,メイン関数が分かりやすくなって良い.他にも効能があると思われれるが,今のところ私には分からない(Python二日目). |
027 |
クラスone_buttonのインスタンスgをつくっています. |
028 |
無限ループに入ります. |
クラスの継承
プログラム
リスト 2 ボタンを一つ表示し,それを押すと終了するプログラム(sample01A.py).リスト1のクラスを継承している.Windows版は,こちら.
001 #!/usr/bin/python3
002 # -*- coding:euc-jp -*-
003
004 import sample01A as B
005
006 #=======================================
007 # クラスの定義
008 #=======================================
009 class BE(B.one_button):
010 # メソッド再設定
011 def goout(self):
012 print('extend 終了')
013 exit()
014
015 #=======================================
016 # メインプログラム
017 #=======================================
018 if __name__ == '__main__':
019 g=BE()
020 g.mainloop()
解説
ページ作成情報
参考資料
更新履歴
XXXX年XX月XX日 |
ページの新規作成 |
XXXX年XX月XX日 |
更新内容の説明 |
|