だぶるばいせっぷす 新館

ホワイトカラーではないブルーカラーからの視点

【プログラミング】 python奮闘記 その9 ~関数とかメソッドとかクラスとか

この記事は、現在進行系でゼロからプログラミングを勉強している私が、勉強の一環として進展状況をアウトプットする目的で投稿しています。
その為、間違った記述や無駄な作業が結構多めとなっていますが、『それでも良いから一緒に勉強している気になりたい』という方に向けて書いていますので、予め御了承ください。

前回からは、実際にプログラミングをしてみようという事で、私の本業の見積もりソフトを製作し始めています。
その準備として、前回は『Visual Studio Code (以下 VS code)』の説明を書きました。
今回からは、本格的に書いていこうと思います。
kimniy8.hatenablog.com

作ろうと思っているプログラムは、私が本業の紙箱製作の簡易見積もりの自動化ソフトでしたね。
プログラムを作るのに必要なのは、パッと思いつく限りでは、ユーザーが寸法を入力する『入力窓』と、見積もりボタンを押すと結果が出る『ボタン』です。
この2つの機能を持つのが、『tkinter』というモジュールです。
tkinter』の使い方というのは、第1回でも紹介した本、『12歳からはじめるゼロからのPythonゲームプログラミング教室』に書かれていますので、興味の有る方は、そちらを参考にしてみてください。
取り敢えず最初に『tkinter』を使いたいという事が決まりましたので、早速、1行目に書いていきます。

import tkinter

これで、import終了です。 コンピューターはプログラムを上から順番に読んでいくので、import文は、プログラムの冒頭にまとめて書くようにしておくと良いそうです。
そして次に必要なのが、入力欄やボタンを表示させる為のウインドウです。
このウインドウも、tkinteの中に道具として存在しますので、その関数を呼び出し、ウインドウの設定をしていきます。

# ウインドウ作成
root = tkinter.Tk()
root.title("見積もり")
root.minsize(640, 480)

# メインループ
root.mainloop()

一番最初の『#』から続く文はコメントと呼ばれるもので、プログラムを後から見直す際に見やすくする為の解説文です。
『#』を付けると、その後に続く文1行分ををコードから除外してくれます。改行はできないので注意してください。

2行目で、rootにtkinterというモジュールのTkというウィンドウ作成の関数を代入しています。語尾の()で関数が実行されているっぽいです。(この辺りの認識が甘いので断定できない)
今更になりますが、関数に引き渡される値のことを引数(ひきすう)と呼び、引数がある場合は関数の後の()内に引数を入れます。今回の場合は、引数無しという事です。
3行目で、ウィンドウのタイトルを決めています。ピリオド『.』は、日本語で『の』という理解でいいと思います。
この場合でいうと、root『の』titleとして、見積もりという文字列を引数として渡しています。 見積もりの周りの『""』は、文字列ですよとコンピューターに伝える記号で、『''』でも代用可能です。
最後の列の、root.minsize(640, 480)というのは、root『の』メインサイズを決めるメソッド『minsize』に(640, 480)という引数を渡しています。
意味は、x軸方向(横方向)に640ピクセル、y軸方向(縦方向)に480ピクセルという意味です。

ここで、x軸とかy軸といった一についての話が出てきたので、ついでに説明しておきます。
プログラムでは基本的に、一番左上の隅っこを、x軸y軸共に0として表し、xの値が増える程、右に行く事を表し、yの値が増える程、下方向に行く事を表します。

ピクセルとは単位のことで、お使いのディスプレイがフルHDの場合は1440×1080ピクセル。4kの場合は3840×2160ピクセルが画面イッパイという事になります。
4kやフルHDのテレビを思い出してみれば分かると思いますが、同じ4Kテレビでも40インチや60インチといった幅があることからも分かる通り、ピクセルに絶対的な大きさというものは存在しません。
40インチ4Kのテレビのピクセルと60インチ4Kのピクセルの大きさは違います。
その為、ピクセルというのは『画面のどれ位を占めるのか』といった認識で良いと思います。
当然ですが、ピクセル指定をした場合、ユーザーが出来上がったソフトを4Kで使うのかHDで使うのかで観た印象が変わってくるということも出てきます。

最後のメインループによって、ここで書いたプログラムが起動します。
取り敢えずウィンドウは出来たので、次はそのウィンドウに、色を付けていきたいと思います。
ウィンドウを装飾する関数は、tkinterCanvasです。
ここでまた、後付の説明をしていこうと思いますが、前回にメインウィンドウを作った際に『Tk』という関数を呼び出したと書きましたが、実際にはクラスです。(たぶん)

関数の回で、ちょっとだけ説明をしたと思いますが、pythonでは関数そのものも関数に取り込むことが出来ます。
その特徴を使ってなのか、関数の中で複数の関数を定義している、大本の関数というものが存在するのですが、その様な存在をクラスと呼びます。
書き方は

class クラス名:
	変数の定義、処理など

	def メソッド名:
		処理1
		処理2
	def メソッド名:
		処理1
		処理2

って感じで、クラスの中に組み込まれている(インデント内に有る)『def』から始まる関数のことをメソッドと呼ぶようです。
クラス名の命名方法は一文字目を大文字にして、『_』などは利用しないというのが、暗黙の了解で決まっているそうなんですね。
どうしても『_』を利用したいって時は、使わずにその次の文字を大文字にすることで差別化するようです。例えば、『Japan_kyoto』というクラスを作りたい場合は、『JapanKyoto』って感じ。
これは、後から読んだ時のわかり易さを重視しているだけなので、こう書かないと動かないというわけではないですが、この様なルールを皆で共有できれば、無駄な時間が省けたりしますよね。

一通り説明が終わったところで、本題に戻りましょう。
最初に書いたコードえを繋げたのがこちら

import tkinter

# ウインドウ作成
root = tkinter.Tk()
root.title("見積もり")
root.minsize(640, 480)

# メインループ
root.mainloop()

この、ウインドウ作成とメインループの間に、画面装飾を追加します。
最初に書いておきますと、メインループは一番下固定にしておき、これより下には何も書きませんので、注意してください。

# 画面装飾
canvas = tkinter.Canvas(bg="black", width=640, height=480)
canvas = place(x=0, y=0)

変数『canvas』にtkinterCanvasという引数(bg="black", width=640, height=480)と入れたクラスを代入します。
Canvasの引数の意味は、『bg』がbackground(バックグラウンド、背景)の略で、そこに『"black"』を指定しているので、背景色が黒という意味になります。
『width』と『height』は、日本語直訳そのままの意味で、幅と高さを意味しますので、ここでは『Canvas』の大きさ指定をしているという意味。
次の行では、『canvas』に場所を指定しています。前回も書きましたが、基本的には左上が基準になる為、xとyが共に0のところに置くことで、rootとcanvasを左上で揃える感じで重ねることが出来ます。
今回は、分かりやすいように真っ黒にしましたが、この『canvas』を使うことによって、背景に画像やイラストを指定することも出来ます。

これを実行すると、大きさが640x480ピクセルの、真っ黒な画面が出てくると思います。
これでした準備は終了!この真っ黒な画面の上に、色んなウィジェットと呼ばれる道具を置いていくことにしますが、続きは、また次回にということにします。
kimniy8.hatenablog.com

今回のプログラムで書いたコードのまとめはこちら。

import tkinter

# ウインドウ作成
root = tkinter.Tk()
root.title("見積もり")
root.minsize(640, 480)

# 画面装飾
canvas = tkinter.Canvas(bg="black", width=640, height=480)
canvas = place(x=0, y=0)

# メインループ
root.mainloop()