Information Engineering Exercise II 月曜日3~4限目 3rd-4th Period, Mon. 担当:北川 晃(技術教育コース) A. Kitagawa (Technology Education)
様々な装飾1(Some decorations 1) 文字の色を変えたり,文字列の背景色を変更したりすることもできる. (We can change the color of string and its background. ) … # 文字列を赤で表示する label = Tkinter.Label(root, text= 'Hello World’, \ foreground = ‘red’) label.pack() 色の指定(24ビットカラー) (Designation of 24-bit color) red: #FF0000 blue: #0000FF green: #00FF00 white: #FFFFFF black: #000000 magenta: #FF00FF cyan: #00FFFF yellow: #FFFF00 … # 文字列の背景色を変える label = Tkinter.Label(root, text= 'Hello World’, \ background = ‘#FF0000’) label.pack() 他にも様々なオプションがある (A lot of other options are available. )
(Display of the main window) 様々な装飾2(Some decorations 2) 複数の文字を表示することもできる(Label文にオプション). (A number of strings are displayed (options are added in Label statement). import Tkinter root = Tkinter.Tk() label1 = Tkinter.Label(root, text = 'Hello everybody. How are you?', \ background = ‘yellow’) label1.pack() label2 = Tkinter.Label(root, text = 'Oh My God!', \ background = 'red‘) label2.pack() label3 = Tkinter.Label(root, text = 'See you tommorow.', \ background = ‘cyan’) label3.pack() root.mainloop() label1の表示 (Display of label1) label2の表示 (Display of label2) label3の表示 (Display of label3) メインウィンドウの表示 (Display of the main window)
様々な装飾3(Some decorations 3) 文字の間隔を変えたり,装丁を変えたりすることができる(pack文にオプション). (Spaces between strings can be adjusted and solid display is available (options in pack statement). ) import Tkinter root = Tkinter.Tk() label1 = Tkinter.Label(root, text = 'Hello everybody. How are you?', \ background = ‘yellow’, relief = Tkinter.RAISED) label1.pack(padx=5, pady=5, anchor = Tkinter.CENTER) label2 = Tkinter.Label(root, text = 'Oh My God!', \ background = 'red‘, relief = Tkinter.SUNKEN) label2.pack(padx=5, pady=5, anchor=Tkinter.E) label3 = Tkinter.Label(root, text = 'See you tommorow.', \ background = 'cyan‘, relief = Tkinter.GROOVE) label3.pack(padx=5, pady=5, anchor=Tkinter.W) root.mainloop() 水平,垂直方向の 外部の余白の調整 (Adjustment of horizontal and vertical outside spaces. ) 文字列の立体表示 (Solid display of widgets) 文字列の位置 (Display position of the string)
ボタンの配置と動作1(Alignment of button and its behavior 1) ボタンを作成し,押したときの動作を指定できる.(Button is available and we can control the behavior when it is pushed. ) import Tkinter root = Tkinter.Tk() def func(): label.config(text= 'Pushed!') label = Tkinter.Label(root, text= 'Push Button!') label.pack() button = Tkinter.Button(root, text = "Push!", command = func) button.pack() root.mainloop() ボタンが動作したときの関数を定義 (Definition of a function referred when button is pushed. ) ボタンを押したときの動作 (Behavior of the button when it is pushed. ) ボタンの生成,表示 (Generation and display the button. )
ボタンの配置と動作2(Alignment of button and its behavior 2) マウスのポイント状況での制御もできる.(We can control events with a mouse device. ) import Tkinter root = Tkinter.Tk() def func(): label.config(text= 'Pushed!') def func_event(q): label.config(text = 'Push Button') label = Tkinter.Label(root, text= 'Push Button!') label.pack() button = Tkinter.Button(root, text = "Push!", command = func) button.pack() button.bind('<Leave>',func_event) root.mainloop() ‘q’はダミーの変数 (‘q’ is a dummy variable. ) ボタンの追加動作に関する 関数を定義 (Definition of a function referred when the additional event occurs. ) マウスをウィジェットの外に出したとき (‘When the mouse is moved to outside of widget, ) ボタンのイベントの追加 (Addition of another event for the button)
複数のボタンの配置1(Alignment of a number of buttons 1) フレームを複数設定し,ボタンを配置する. (We can make some frames and align buttons in them. ) フレームの幅の設定 (Configuration of frame width) import Tkinter root = Tkinter.Tk() frame_window = Tkinter.Frame(root, relief = Tkinter.SUNKEN, width = 10) frame_window.pack() frame1 = Tkinter.Frame(root, relief = Tkinter.FLAT) frame1.pack() frame2 = Tkinter.Frame(root, relief = Tkinter.FLAT) frame2.pack() frame3 = Tkinter.Frame(root, relief = Tkinter.FLAT) frame3.pack() ボタンの動作関数 (Functions for actions when button is pushed) def func1(): label.config(text = '1') … def func9(): label.config(text = '9') フレームの生成 (Generation of frames)
(Position of the string) 複数のボタンの配置2(Alignment of a number of buttons 2) label = Tkinter.Label(frame_window, text = ‘’, relief = Tkinter.SUNKEN, \ width = 10, anchor = Tkinter.E) label.pack() button7 = Tkinter.Button(frame1, text = '7', relief = Tkinter.RAISED, \ width = 3, command = func7) button7.pack(side = Tkinter.LEFT) button8 = Tkinter.Button(frame1, text = '8', relief = Tkinter.RAISED, \ width = 3, command = func8) button8.pack(side = Tkinter.LEFT) button9 = Tkinter.Button(frame1, text = '9', relief = Tkinter.RAISED, \ width = 3, command = func9) button9.pack(side = Tkinter.LEFT) button4 = Tkinter.Button(frame2, text = '4', relief = Tkinter.RAISED, \ width = 3, command = func4) button4.pack(side = Tkinter.LEFT) … 文字の表示位置 (Position of the string) フレームの左詰で (Left aligned in the frame)
複数のボタンの配置3(Alignment of a number of buttons 3) … button1 = Tkinter.Button(frame3, text = '1', relief = Tkinter.RAISED, \ width = 3, command = func1) button1.pack(side = Tkinter.LEFT) button2 = Tkinter.Button(frame3, text = '2', relief = Tkinter.RAISED, \ width = 3, command = func2) button2.pack(side = Tkinter.LEFT) button3 = Tkinter.Button(frame3, text = '3', relief = Tkinter.RAISED, \ width = 3, command = func3) button3.pack(side = Tkinter.LEFT) root.mainloop()
(Initial value of the string) テンキーアプリケーションの改良(Improvement of numeric keypad) ボタンを続けて押したとき,文字列が追加されるように変更する. (Let’s modify the program as a number is added when keys are pushed successively. ) import Tkinter root = Tkinter.Tk() s = '' frame_window = Tkinter.Frame(root, relief = Tkinter.SUNKEN, width = 10) frame_window.pack() … frame3 = Tkinter.Frame(root, relief = Tkinter.FLAT) frame3.pack() def func1(): global s s=s+'1' label.config(text = s) 文字列の初期値 (Initial value of the string) 関数外の変数に変更を加えるために必要 (‘global’ option is necessary to operate variable out of this function. )
電卓を作ってみよう(Let’s make a calculator!) 電卓を作ってみよう. (Let’s make a calculator program that has numeric keypad and AC key. ) 自然な電卓の動作を実現するために,工夫してみよう. (Let’s shape the program to realize a natural behavior of calculator. ) ゼロが表示されているときは,ゼロを追加して表示しない. (When ‘0’ is displayed, another ‘0’ should not be added. ) 小数点が二度出てこない.(The decimal point does not appear twice. ) 演算を行うために,文字列を数値に変換したり, 表示するために数値を文字列に変換したり. (Convert variables between strings and values for calculation or display of them. )
ヒント:足し算機能の実装(Hint: Implementation of summation) 足し算キーとイコールキーの動作を次のように設定する. (A sample code for summation and equal keys. ) 足し算キー def func_summation(): global op,s,a op = 'summation' a=float(s) s='' def func_equal(): global a,b,s b=float(s) if op == 'summation': c=a+b label.config(text = str(c)) s='0' 足し算であることの記憶 変数が関数の外で定義されている場合は,通常関数の中でも参照できる. 変数が関数の中で定義されていると,関数の外ではその変数を参照できない. それまでに入力されている数の記憶 記憶されている数の消去 イコールキー 二つ目に入力された数の記憶 足し算の場合は… 記憶されている数の消去
電卓の自然な動作に向けて1(For natural actions of calculator part 1) ディスプレイに「0」が表示されているときに,0キーを押しても「00」とは表示されない. (Suppose that ‘0’ is displayed on the label. No more ‘0’ is added if 0 key is pushed. ) ヒント:0キーの動作を,ディスプレイの 表示によって場合分けする. (Hint: We divide the action of 0 key Into cases according to string on the display. ) Pushing ‘0’ key Yes No s=‘0’? s=s s=s + ‘0’ Displaying the string ‘s’
電卓の自然な動作に向けて2(For natural actions of calculator part 2) ディスプレイ上の数字が小数点を含む場合,二つ目の小数点を表示しない. (When the string on the display already contains a symbol ‘.’, the second ‘.’ is not displayed any more. ) ヒント:’s’の文字列の中に小数点「.」が含まれていないか,チェックする. (Hint: Check whether ‘.’ is contained in the string ‘s’. ) inステートメントを使う.(Use ‘in’ statement. ) 例文 >>>x=‘o’ in ‘kochi’ >>>x True >>>y=‘a’ in ‘kochi’ >>>y False True for s = ‘123.45’ False for s = ‘12345’ ‘.’ in s A condition for ‘if’ statement
電卓の自然な動作に向けて3(For natural actions of calculator part 3) 答えが整数の場合,ディスプレイには整数値として表示される. (When we obtained an answer as an integer, the answer is displayed as an integer. ) ヒント:得られた答えが整数かどうかチェックする. (Hint: Check the answer whether it is an integer or not. ) ある数𝑐に対して,’int()’関数は小数部分を切り捨てる. (For a number c, a function ‘int()’ discard fractional portion. ) c-int(c)を評価して,ゼロならcは整数. (Evaluate c-int(c). If it is zero, c is an integer. )
発展的なプログラミング(Advanced programming) 「1」,「+」,「1」,「=」,「+」,「1」,「=」の順にキーを押して,3が表示されるか? (When pushing keys in order of ‘1’, ‘+’, ‘1’, ‘=‘, ‘1’, ‘=‘, can we obtain an answer 3?) 「1」,「+」,「1」,「=」,「1」の順にキーを押して,1が表示されるか? 21と表示されないか? (When pushing keys in order of ‘1’, ‘+’, ‘1’, ‘=’, ‘1’, is the string ‘1’ displayed correctly? Isn’t the string ‘21’ displayed?) ディスプレイの領域内に表示できない答えが得られたときはどうするか? (When the answer is obtained as an long string that is not completely display, how should we process the case? )