こんにちは かず まなぶ です。(´・ω・)
今日はtkinterを触っていこうと思います。
tkinterはpythonをインストールすると最初から入っているpython用のGUIモジュールです。
他にもwxPythonとかKivyが気になるのですが、まずはtkinterで最低限のことをやれるようになってから、他のGUIにチャレンジしようと思います。
tkiniterのフレームワーク
まだまだ腑に落ちないところがありますが、とりあえずこれで最低限動きました。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
#tkinter のフレームワーク import tkinter as tk #tk.Frameクラスの継承 class Application(tk.Frame): #初期化メソド。引数としてmaster(後述)が入る def __init__(self, master=None): super().__init__(master) self.master = master self.pack() self.create_widgets() #==== ウィジェットを作成する ==== def create_widgets(self): #hi_thereボタンす作成する self.hi_there = tk.Button(self) self.hi_there["text"] = "Hello World\n(click me)" #commandを設定する self.hi_there["command"] = self.say_hi #表示させる self.hi_there.pack(side="top") #閉じるボタンを作成する self.quit = tk.Button(self, text="QUIT", fg="red", command=self.master.destroy) self.quit.pack(side="bottom") #==== command を作成する==== def say_hi(self): print("hi there, everyone!") #tkのクラスTk()からrootという<tkinter.Tk object .>を作る。 root = tk.Tk() #クラスApplication内の初期化メソド引数であるmasterへrootを渡す。 app = Application(master=root) #GUIを起動させる app.mainloop() |
応用:tkinterで電卓アプリを作ってみる
応用例として、簡単な電卓を作ってみました。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 |
#tkinter で計算機を作成する import tkinter as tk #tk.Frameクラスの継承 class Application(tk.Frame): #初期化メソド。引数としてmaster(後述)が入る def __init__(self, master=None): super().__init__(master) #配置指定はジオメトリを使用する self.master.geometry() #タイトルを付ける self.master.title("Calculation") #入力部を作成 self.entry=tk.Entry(self.master) #メニューバーを作成 self.menu_bar=tk.Menu(self.master) #メニューバーを作成するときは #self.master.configにmenu=self.menu_barだと伝える必要がある。 self.master.config(menu=self.menu_bar) #その他、ウィジェットを配置する self.create_widgets() #==== command を作成する==== #数字ボタンをおしたらエントリーの最後に渡された引数を入力する def input(self,action): self.entry.insert(tk.END,action) #エントリーをデリートする(始めから終わりまで) def clear_all(self): self.entry.delete(0,tk.END) #一旦エントリーをゲットして、最後の文字を除いた文字列を書き込む def clear_one(self): txt=self.entry.get() self.entry.delete(0,tk.END) self.entry.insert(0,txt[0:-1]) #計算する def equals(self): #文字列をpythonの形で実行する関数eval()を使用する self.value=eval(self.entry.get().replace("÷","/").replace("x","*")) self.entry.delete(0,tk.END) self.entry.insert(0,self.value) #==== ウィジェットを作成する ==== def create_widgets(self): #==== メニューバー ==== file_menu=tk.Menu(self.menu_bar) #メニューバーにExitを追加 file_menu.add_command(label="Exit",command=self.master.destroy) #quitでは動かなかった #メニューバーのFileの下にfile_menu(今はExitのみ)をカスケード表示 self.menu_bar.add_cascade(label="File",menu=file_menu) #==== エントリー ==== self.entry.grid(row=0,column=0,columnspan=6, pady=3) self.entry.focus_set() #==== ボタン ==== tk.Button(self.master,text="7",width=3,command=lambda:self.input(7)).grid(row=1,column=0) tk.Button(self.master,text="8",width=3,command=lambda:self.input(8)).grid(row=1,column=1) tk.Button(self.master,text="9",width=3,command=lambda:self.input(9)).grid(row=1,column=2) tk.Button(self.master,text="4",width=3,command=lambda:self.input(4)).grid(row=2,column=0) tk.Button(self.master,text="5",width=3,command=lambda:self.input(5)).grid(row=2,column=1) tk.Button(self.master,text="6",width=3,command=lambda:self.input(6)).grid(row=2,column=2) tk.Button(self.master,text="1",width=3,command=lambda:self.input(1)).grid(row=3,column=0) tk.Button(self.master,text="2",width=3,command=lambda:self.input(2)).grid(row=3,column=1) tk.Button(self.master,text="3",width=3,command=lambda:self.input(3)).grid(row=3,column=2) tk.Button(self.master,text="0",width=3,command=lambda:self.input(0)).grid(row=4,column=0) tk.Button(self.master,text=".",width=3,command=lambda:self.input(".")).grid(row=4,column=1) tk.Button(self.master,text="÷",width=3,command=lambda:self.input("÷")).grid(row=4,column=2) tk.Button(self.master,text="x",width=3,command=lambda:self.input("x")).grid(row=1,column=3) tk.Button(self.master,text="-",width=3,command=lambda:self.input("-")).grid(row=2,column=3) tk.Button(self.master,text="+",width=3,command=lambda:self.input("+")).grid(row=3,column=3) tk.Button(self.master,text="%",width=3,command=lambda:self.input("%")).grid(row=4,column=3) tk.Button(self.master,text="AC",width=3,command=lambda:self.clear_all()).grid(row=1,column=4) tk.Button(self.master,text="C",width=3,command=lambda:self.clear_one()).grid(row=1,column=5) tk.Button(self.master,text="=",width=6,command=lambda:self.equals()).grid(row=4,column=4,columnspan=2) #tkのクラスTk()からrootという<tkinter.Tk object .>を作る。 root = tk.Tk() #クラスApplication内の初期化メソド引数であるmasterへrootを渡す。 app = Application(master=root) #GUIを起動させる app.mainloop() |
今後のtkinter勉強
私の最終ゴールは、画像処理アプリの作成です。
画像をカメラで取得し、リアルタイムで画像処理して表示するというところまでやっていきたいと思います。かず まなぶ (´・ω・)
The following two tabs change content below.
Keita N
最新記事 by Keita N (全て見る)
- 2024/1/13 ビットコインETFの取引開始:新たな時代の幕開け - 2024年1月13日
- 2024/1/5 日本ビジネスにおける変革の必要性とその方向性 - 2024年1月6日
- 2024/1/3 アメリカ債権ETFの見通しと最新動向 - 2024年1月3日