操作できるアプリを作る GUIツールキット
R5.2月からPythonの勉強をしているプログラミング初心者です。
勉強した内容を備忘メモ程度にアウトプットしていきます。
参考書籍はこちら。
(さすがに全てまるまる写してしまうとまずいので部分的に抽出していきます。)
今回はGUIツールキットを使って操作できるアプリを作ってみましょう。
Pythonでは操作できる画面を作る時は標準ライブラリの「tkinter(ティーキンター・ティーケーインター)」を使います。
「tkinter」とはGUIツールキットの一種で、GUIツールキットとは「ウィンドウの上にボタンやラベルを並べて操作できる画面を作ることができるライブラリ」です。
ちなみにGUIとは「グラフィカルユーザーインターフェース」の略です。
こんにちはアプリを作ってみよう。
まずは、「ラベルとボタンを表示するだけのアプリ」を作ってみましょう。
(今回から一行一行をしっかり理解するために画像ではなく入力でコードを書いていきます。)
import tkinter as tk・・・・・・tkinterをインポートしてtkと略して使う
root = tk.Tk() ・・・・・・・・画面を作る
root.geometry("200x100")・・・画面の大きさを決める(xは半角英字の小文字エックス)
lbl = tk.Label(text="LABEL")・・・ラベルを作る
btn = tk.Button(text="PUSH")・・ボタンを作る
lbl.pack()・・・・・・・・・・・画面にラベルを配置する
btn.pack()・・・・・・・・・・・画面にボタンを配置する
tk.mainloop()・・・・・・・・・作ったウィンドウを表示する
以上のプログラムを実行すると下のウインドウが作成されます。
一気に見慣れない命令が続出して「うっ」となってしまいますが、そんなに難しいことはしていないので一行ずつ命令の意味を見ていきましょう。
一行ごとの解説
import tkinter as tk・・・・・・tkinterをインポートしてtkと略して使う
まずはtkinterをインポートして、tkinterと毎回入力するのは面倒なので今後はtkと呼ぶという命令をします。
root = tk.Tk() ・・・・・・・・画面を作る
次に「root」という変数に「tk.Tk()」という命令を代入します。これは以前「モジュール名.関数名」でやったものと同じですね。tkinter(tk)というモジュール(ライブラリ)のTk()という関数を使うという命令です。
Tk()関数を使用することでメインウィンドウを作成することがでます。
root.geometry("200x100")・・・画面の大きさを決める(xは半角英字の小文字エックス)
geometry()はウィンドウの大きさを決める命令です。rootで作成したウインドウの大きさを決めているんですね。数字は横×高さになっています。
lbl = tk.Label(text="LABEL")・・・ラベルを作る
lblという変数にLabel()を代入します。 これはラベルの部品を作成する命令です。ラベルとは文字列や画像のことです。今回は文字列「LABEL」という部品を作っています。
btn = tk.Button(text="PUSH")・・ボタンを作る
btnという変数にButton()を代入します。これはボタンの部品を作成する命令です。今回はボタンの上に「PUSH」という文字を表示させます。
lbl.pack()・・・・・・・・・・・画面にラベルを配置する
btn.pack()・・・・・・・・・・・画面にボタンを配置する
これは上で作ったラベルとボタンをウィンドウに配置する命令(pack())です。上から順に先ほど作った部品を配置していきます。
tk.mainloop()・・・・・・・・・作ったウィンドウを表示する
最後にmainloop()という命令で作成したウインドウと表示させます。
それでこのようなアプリが作られるわけですね。
ただ、このままではボタンを押しても何も起こらないので命令を追加してみましょう。
ボタンで動くようにする
ボタンをクリックしたらラベルに「こんにちは」と表示されるアプリに改造します。
「こんにちはと表示される関数」を追加して、ボタンがクリックされたらその関数を呼び出すように修正します。
import tkinter as tk
def displabel():
lbl.configure(text="こんにちは")
root = tk.Tk()
root.geometry("200x100")
lbl = tk.Label(text="LABEL")
btn = tk.Button(text="PUSH",command = displabel)
lbl.pack()
btn.pack()
tk.mainloop()
赤字部分が追加した部分です。
def displabel():
lbl.configure(text="こんにちは")
これはdisplabelという関数を新たに作る命令です。defは以前やりましたね。
「configure」とは修正するという意味です。lblの文字列を「こんにちは」に修正するという命令ですね。
btn = tk.Button(text="PUSH",command = displabel)
「command = displabel」のcommand部分は「ボタンが押されたら」という意味になります。「ボタンが押されたらdisplabel(lblの文字列LABEL→こんにちはに修正)を実行してください。」という命令になりますね。
ボタンを押すと
LABEL→こんにちはに変わるようになりました。
ランダムのアプリを作ってみた
これを少し応用して前回出てきたrandomモジュールを使って僕が友人や先輩たちと15年近く前に大ハマりしたゲーム「モンスターハンター」の武器おみくじアプリを作ってみました。
import tkinter as tk
import random
def displabel():
kuji =["大剣","片手剣","双剣","太刀","ハンマー","狩猟笛","ランス","ガンランス","スラッシュアックス","チャージアックス","操虫昆","弓","ライトボウガン","ヘビィボウガン"]
lbl.configure(text=random.choice(kuji))
root = tk.Tk()
root.geometry("200x100")
lbla = tk.Label(text="武器ルーレット")
lbl =tk.Label(text="武器を表示")
btn = tk.Button(text="PUSH",command = displabel)
lbla.pack()
lbl.pack()
btn.pack()
tk.mainloop()
アプリを起動すると
この画面が表示されます。
これでボタンを押すと、
武器が表示されます。
もう一度押すと、
武器の表示が変わりました。
当時、モンスターハンターポータブル2ndGをやっていたんですがどんなモンスターでも楽に勝てるようになってきて少しマンネリ化してきた時、紙で作ったくじで当たった武器を使って狩りに行くという遊び方を始めたんですがこれが本当面白かったんですよね。みんな慣れない武器に悪戦苦闘しながらやるのが面白かったです。
それを今回アプリ化してみました。そのうちモンスターやクエストもランダムで選べるようなアプリに改造したい…。
あと見た目ももっとちゃんとしたものにしたいですねぇ。
まとめ
今回はアプリを作ってみました。アプリを作ると一気にプログラミングをしている感があって面白いです。初めて自分でアプリを作ってみましたが愛着があって可愛く感じますね。もっと勉強して今回作ったアプリをパワーアップさせていきたいです。