Yamamoto's Laboratory
 
環境設定
 
プログラム作成
  書き方
 
 
 
 
tkinter
  練習01
 
 
 
 
 
 
コンピューター Python tkinter 練習01

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()

解説

ページ作成情報

参考資料

  1. 田中義文さんの「Python GUI入門 —Tkinter からPIL まで—」は大変優れたテキストです.このページは,完全にこのテキストに従っています.
  2. 同じく,田中義文さんの「Python 使用法」にいろいろな話題があります.その中で,「Python GUI 使用法 (Tkinter)」がGUIの参考になります.
  3. An Introduction to Tkinter.英文ですが,詳しいです.

更新履歴

XXXX年XX月XX日 ページの新規作成
XXXX年XX月XX日 更新内容の説明


no counter