2025年度 電子情報通信課程 計算機実習II

講義に関して,ちょびっとコメント

エラーメッセージの扱いについて

インタプリタやコンパイラが出力するエラーメッセージは,プログラムの間違いを訂正するための重要なヒントです.

プログラム開発とは「エラーメッセージとの二人三脚」だと言っても過言ではありません.

エラーメッセージは単純なものから特殊なものまで沢山ありますが,何度も読んでいるうちに,どんな間違いをしたらどんなエラーが出るのかが推測できるようになります.しっかりエラーメッセージと付き合っているうちに,最初からエラーの少ないプログラムを書くスキルが身につくというものです.

毎回の課題で「どのようなエラーが起きるか」と問われた際には,エラーメッセージはそのまま報告してください.自分で解釈/要約しないで下さい.

GUIプログラミング

今日のポイント

教科書は第3章「ウインドウを作ってみよう」の3-1~3-4です.

今まではCUI画面でテキスト表示をしてきました.今日からはOSのウインドウシステムを利用した,GUI の世界に踏み入ります.

まずは,ウインドウを作ってみましょう.

マウスのクリックでプログラムを動かしてみましょう.

素材について

いらすとやさんをもとに作成した素材は,です.( chap3-back.png )本実習のプログラムではこれを使います.

準備

素材のダウンロード

まず, img3 という名前のディレクトリを作成して下さい.

次に,そのディレクトリ下に,上の素材画像を chap3-back.png という名前で保存します
 ※ファイラの設定で拡張子は必ず表示させて下さい

tkinter のimport( インポート )

pythonで画像を扱うには色々な方法がありますが,本実習および教科書では tkinter というモジュールを使います.

tkinterは画像を扱う仕組みとして「Tk」を使います.これはスクリプト言語から手軽に呼び出せる仕組みになっており,興味がある人は「Tcl/TK ( ティクル・ティーケー )」を調べてみて下さい.

※tkinterのように,再利用可能なパッケージとしてまとめられた関数群のことをモジュールといいます.モジュールを自分のプログラムで利用するにはimport文 を使います.

※注意※ MacOSを使っている人は,pngファイルが表示できない場合があります.そのときは,MacOSでのインストールメモの後半に対応方法を書いていますので,そちらを参照して下さい.

動作確認

次のプログラムを実行して,エラーが出ないかどうか確認しましょう.

エラーが出た場合は,tkinterのモジュールが正しく扱えていませんので,上記の話をもう一度読み直して,作業して下さい.

ex3-1.py

hlonqs sjhmsdq

解説-1

import tkinter

tkinter というモジュールを呼び出して( 読み込んで ),その中に含まれる関数等を使えるようにします.

 ※このコードだけでは実行してもなにも起きません

ウインドウの枠組みの作成

教科書p.55( §3-1,小節「簡単なウインドウを作ってみよう」 )下側の chap3.py を入力して実行しましょう.

解説-2

root = tkinter.Tk()

tkinter モジュール中の Tk() という命令を実行します.この命令はウインドウを作って,そのウインドウを戻り値として返します.今,それをroot という変数に代入しました.この変数には単純な数値ではなく「ウインドウ」というモノ全体を扱います.このような対象物のことをオブジェクトと言います.

root.mainloop()

Tk()で生成したオブジェクトには,いくつかの命令( メソッド )と変数( パラメータ )があります( 正しくは,Tk()から継承します ).

命令は引数を取るので,丸括弧"()"でくくります.引数がないときは丸括弧だけになります.

rootオブジェクトから呼び出された mainloop() という命令は,ウインドウを描画( 画面に表示 )し,イベントが生じるのを待つ( ループする )命令です.

本来であれば,mainloop()を呼び出す前に,ウインドウの中身の記述が必要です.今回はその部分を書いていないので,枠だけの何もないウインドウが表示されるはずです.

※実はウインドウの描画そのものは,OSの仕事です.「閉じる」「最大化」などのボタンは,OS側で用意されたものです.なので同じプログラムでもOSが異なるとデザインが異なることがあります.

課題 3-1

上のソースコード chap3.py の最後の「root.mainloop()」をコメントアウトして,何が変わるかを具体的に報告して下さい.

ウインドウの設定

教科書p.58 の chap3.py ( §3-1,小節「ウインドウのタイトルや大きさを設定する」 )を入力して,実行しましょう.

    ウインドウのタイトルとサイズを設定します.

教科書p.60( §3-2,小節「画像を表示するパーツを作る」 ) の chap3.py を入力して,実行しましょう.

    ウインドウの背景を設定して,配置します.

課題 3-2

3-2-1) 背景色を青,赤,緑に変えて下さい.それぞれ変えた行のみ( つまり3行 )を提出して下さい.

3-2-2) canvas.place の x と y の値を自由に変えて下さい.設定したそれぞれの値と,その結果画面がどのように変わったかを具体的に報告して下さい.

画像の表示

教科書p.62( §3-2,小節「キャンパスに画像を表示する」 )の chap3.py を入力して,実行しましょう.

    画像のファイル名と場所に注意して下さい.

解説-3

tkinter.PhotoImage()

画像ファイルを変数に読み込みます.

create_image()

変数の画像ファイルを,実際にウインドウに貼り付けます.

原点( 基準点 )の位置は画像の中心です.教科書p.64をよく読んで理解しましょう.

課題 3-3

chap3.py中の create_image() の第1引数と第2引数を(100, 100)に変えます.どのように変わったか,結果と理由を具体的に報告して下さい.

画像の表示( その2 )

教科書p.65,xy座標値を変更した chap3.py を入力して,実行しましょう.

解説-4

create_image()

表示したい画像のサイズ情報から原点( 基準点 )の位置を計算する必要があります.

課題 3-4

今作っているプログラムから見て,使っている画像ファイルの相対パスと絶対パスを答えなさい.人によって環境やディレクトリは異なるので注意.

テキストの配置

教科書p.67-68( §3-3,小節「「ラベル」でテキストを配置する」 )の chap3.py を入力して,実行しましょう.※少し長くなってきました.

解説-5

tkinter.Label()

ウインドウに文字を表示するオブジェクトです.

引数として,textに表示する文字列を指定します.

place()

canvas.place()と,question.place() として出てきます.

設定した文字列をウインドウに配置します.

引数として,配置する座標を指定します.

課題 3-5

文字列を「計算機実習2」にして下さい( 作業のみ ).それが「吹き出しに右寄せで」表示されるように座標を調整し,その座標を提出して下さい.

フォントの変更

教科書p.69( §3-3,小節「文字の見た目を調節する」) の chap3.py を入力して,実行しましょう.

 ※どんどん新しいメソッドがでてくるので,コード入力だけでなく教科書をちゃんと読んで下さい!

解説-6

option_add()

ウインドウの設定を変更( 追加 )します.

今回は引数として,「全ての文字」のフォントを「MS Pゴシック」にしています.

なお,MS PゴシックはWindows に標準で入っているフォントですが,LinuxやMacには入っていません.その場合,近いフォントで表示されます.

引数の与え方として,[ ]で囲っていますが,これは「リスト」と呼ばれる扱い方です.後ほど出てきます.

課題 3-6

3-6-1) フォントを「Times New Roman」にして下さい.どのような文字になったかを,わかるように表現して報告して下さい.

3-6-2) 表示するテキストの背景の色を水色,黄色,紫色に変更し,それぞれ変えたコード行を提出して下さい.

テキストボックス,ボタンの追加

教科書p.70-71( §3-3,小節「入力欄とボタンを追加する」)の chap3.py を入力して,実行しましょう.

解説-7

tkinter.Entry()

テキストボックスを作成します.

引数として,ボックスの幅とボックスの線の太さを指定しています.place でウインドウに配置します.

tkinter.Button()

ボタンを作成します.

引数として,ボタンに表示する文字列を指定します.place でウインドウに配置します.

教科書p.72の chap3.py を追加入力して,実行しましょう.

三つ目の吹き出し( 答えの欄 )が空だと分かりにくいので,初期値のセリフを用意しておきます.

イベントドリブンのプログラム

過去に作成した単純なプログラムは,上から一文ずつ順番に実行し,処理結果を標準出力に吐き出すタイプのものです.

一方でウインドウの操作を行うGUIプログラムは多くの場合,ある状態で留まり,ユーザーの動作がきっかけとなってプログラムが次の動作をします.

例えば「マウスをクリックした」とか「キーボードからの入力があった」というものですが,それだけでなく「<閉じる>ボタンが押された」とか「マウスが画像のある場所に来た」といった,システム寄りの作業を動作のきっかけにすることもできます.

この「きっかけ」のことを「トリガー」と呼びます.

このような「何らかのアクション( イベント )」をきっかけにプログラムが何らかの動作をする( 端的には関数が呼び出される )仕組みを「イベントドリブン」といいます.イベントで駆動するプログラムです.

今はまだイベントを受け付ける部分は作っていませんが,これから追加していきます.

 ※イベントドリブンなプログラムは,書かれた機能を実行する順番が,ユーザーの操作に依存します.プログラムが複雑になると,ユーザーが取りうる操作の場合の数が膨大になり,プログラム設計者の予期せぬ組み合わせが生じ,それが思わぬバグとして現れるリスクは高くなります.

プログラム制作会社はこのバグが出ないように,また出てしまったバグをより早く対処するように,日々努力しているのてす.

みなさんも色々な操作の組み合わせを想像しつつ,プログラミングを進めていきましょう.

関数の作成

関数( function )」とは,ある特定の機能( function )を実行する一連の手続きをまとめたものです.

何度も用いる命令群を1つにまとめることで,プログラムは簡略になり,使い易くなります.

引数( argument )を処理することで,要求(パラメータ)に応じた動作をさせることも可能です.

今までに出てきた print() や input() も関数です.

関数は誰かが用意したものだけでなく,自分でも作る/定義することができます.

関数は,def 文を使って定義します.

定義の範囲( ブロック )を表すのにpythonではインデント=字下げを用います.

同一のインデントの区間のことをブロックと呼びます.

関数の例として,教科書 pp.78--79( §3-4,小節「関数を作ってみよう」 ) の chap3-4sample.py を入力して実行しましょう.

ボタンのクリック

教科書p.79( §3-4,小節「ボタンを押したときの処理を作ろう」 )のchap3.pyを入力して,実行しましょう.

解説-8

askbutton["command"] = ask_click

askbutton が押されたらask_clickの関数を呼び出します.

 ※ask_click() ではない( 丸括弧はつかない )と書かないように気をつけて下さい.

教科書p.80のchap3.pyを入力して,実行しましょう.

計算結果をprintで画面に出力するのではなく,テキストに表示します.

今日の課題

上記の課題3-1 から 課題3-6 全てです.

  • 課題をmanabaのレポート欄「第3回課題」に提出して下さい.
  • 直接書き込む「オンライン入力方式」です.
  • 冒頭には「誰へ」「学籍・氏名」「挨拶一言」「報告内容を一言で( タイトル )」を文章として書きます.
  • 実習時間内に終わらなかった場合,締切は「次回の実習開始( 金曜 9:15 )まで」です.
※注意※

◎しっかり課題文を読み,「何をどう答えるべきか」を把握して下さい.

◎manaba入力画面には時間制限があります.いったんPCのエディタでテキストファイルを作成してから,それをコピーするようにしてください.その際のファイル名は自由ですがわかりやすいものを.特にプログラムのソースファイルと混同しないように注意しましょう.

◎実行画面,ソースコード,エラーメッセージ等は"----"や"====="等の境界線を入れて「ここから」「ここまで」を明確にして下さい.

◎ひとまとまりの回答の前後には空行を入れて読みやすくして下さい.びっしり書かれているとチェック/評価の際の間違いの原因になります.

◎提出前にもう一度,冷静に読み直して下さい.細かい部分でも訂正があれば手をかけて下さい.