TENTOアプリ教材サンプルコード(tkinter版)
概要
このページでは、TENTO教材・Pythonの「 Ⅲ.アプリを作る教材 」の「 1.tentoapp編 」に掲載されているプログラムコードをtkinterで書いています。各教材の内容についてはtentoapp編を参照してください。
tkinter版サンプルコード
Pythonアプリ(1):最初の一歩
from tkinter import *app = Tk()
b = Button(app, text = "クリックして")b.pack()
app.mainloop()
Pythonアプリ(2):クリッカーを作ろう
from tkinter import *
count = 0stop = False
def click(): global count, stop print("クリックしたよ!",count) if stop == False: count += 1 l["text"] = count l.update()
def end(): global stop stop = True
app = Tk()
l = Label(app, text = 0)l.pack()
b = Button(app, text = "クリックして", command = click)b.pack()
app.after(10000, end)app.mainloop()
Pythonアプリ(3):ストップウォッチを作ろう
from tkinter import *
time = 0stop = False
def btnstart(): app.after(1000,keika)
def btnstop(): global stop stop = True
def keika(): global time, stop if stop == False: time += 1 lb.config(text = time) app.after(1000,keika)
app = Tk()
lb = Label(app, text = "0", font = ("",30)) #右辺の第一要素はフォントファミリー(””はデフォルト使用)、第二要素がサイズ。lb.pack()
b1 = Button(app, text = "スタート", font = ("",30), command = btnstart)b1.pack()
b2 = Button(app, text = "ストップ", font = ("",30), command = btnstop)b2.pack()
app.mainloop()
Pythonアプリ(4):もぐらたたきを作ろう!
from tkinter import *from random import *
count = 0
def move(): mog.place(x=randint(0,450), y=randint(0,450)) app.after(3000,move)
def click(e): #仮引数eがないと、TypeError: click() takes 0 positional arguments but 1 was givenが出てしまう。 # → .bindで呼ぶなら、仮引き数は必須。ボタンのcommnd=でなら不要だが。→commnd=は引数の取り扱い不可。 global count mog.place_forget() count += 1 lb["text"] = "得点:" + str(count)
app = Tk()app.geometry("600x600")app.title = "もぐらたたき"
lb = Label(app, text = "得点:0", font = ("", 30))lb.place(x=0,y=0)
img = PhotoImage(file="tento.png")mog = Label(app, image = img) #command=はボタンのみ。ラベルでは使えない。.bindを使うしかない。mog.bind("<ButtonPress>", click)
app.after(3000,move)app.mainloop()
Pythonアプリ(5):アラームクロックを作ろう!
from tkinter import *from winsound import * #下記プログラムはwindowsにのみ対応。(tentoappはMacにも対応している)from datetime import *
alarm_hour = 0alarm_minute = 0
def setalarm(): global alarm, alarm_hour, alarm_minute alarm_hour = int(sp1.get()) #tkinterでは、Spinboxで.get()メソッドで取得した値はstr alarm_minute = int(sp2.get())
def update(): global alarm, alarm_hour, alarm_minute now = datetime.now() l1["text"] = str(now.hour) + "時" + str(now.minute) + "分" + str(now.second) + "秒" app.after(100,update) if now.hour == alarm_hour and now.minute == alarm_minute: PlaySound("se_maoudamashii_chime11.wav", SND_FILENAME | SND_ASYNC) # "| SND_ASYNC"がないと、なぜか鳴動後に秒が進まなくなるので。
app = Tk()
l1 = Label(app, font = ("", 30))l1.pack()
sp1 = Spinbox(app, font = ("", 20), width = 2, from_=0, to=23) #注)tkinterでは、toを設定しないと、上下ボタンが効かないsp1.pack()
sp2 = Spinbox(app, font = ("", 20), width = 2, from_=0, to=59)sp2.pack()
b = Button(app, text = "アラーム設定", command = setalarm)b.pack()
app.after(100,update)app.mainloop()
Pythonアプリ(6):カレンダーを作ろう!
from tkinter import *
app = Tk()
youbi = ["月", "火", "水", "木", "金", "土", "日"]col = 0for y in youbi: l = Label(app, text = y) l.grid(column=col, row=0) col += 1
n = 1for row in range(6): for col in range(7): l = Label(app, text = n) l.grid(column=col, row=row+1) n += 1
app.mainloop()
Pythonアプリ(7):電卓を作ろう!
from tkinter import *
app = Tk()
def btnclick(e): text = e.widget["text"] le["text"] += text
def beqclick(): le["text"]= eval(le["text"])
le = Label(app, text = "")le.grid(column=0,row=0)le.colspan = 4
for i in range(10): b = Button(app, text = str(i), width=10) b.bind("<ButtonPress>", btnclick) col = i % 3 row = i // 3 + 1 b.grid(column=col, row=row)
kigou = ["+","-","*","/"]row = 1for k in kigou: b = Button(app, text = k, width=10) b.bind("<ButtonPress>", btnclick) b.grid(column=3,row=row) row += 1
beq = Button(app, text = "=", width=10, command = beqclick)beq.grid(column=3,row=5)
app.mainloop()
Pythonアプリ(8):神経衰弱を作ろう
from tkinter import *from random import shuffle
app = Tk()saisho = None
def click(e): global saisho button = e.widget button["text"] = button.ura if saisho == None: saisho = button else: if saisho["text"] != button.ura: app.after(1000,clear,saisho) app.after(1000,clear,button) saisho = None
def clear(button): button["text"] = "オモテ"
ura_list = [0,1,2,3,4,5,6,7] * 2shuffle(ura_list)
for i in range(16): b = Button(app, text = "オモテ", width=10) b.bind("<ButtonPress>", click) b.ura = ura_list[i] b.grid(column=i % 4, row=i // 4)
app.mainloop()