コンテンツにスキップ

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 = 0
stop = 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 = 0
stop = 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 = 0
alarm_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 = 0
for y in youbi:
l = Label(app,
text = y)
l.grid(column=col, row=0)
col += 1
n = 1
for 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 = 1
for 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] * 2
shuffle(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()