Новогодняя елка с мигаю щими огнями
from random import *
from tkinter import *
from time import *
root = Tk()
с = Canvas(width=200,height=200,bg="lightblue")
с .pack()
while 1:
sleep(0.01)
с .create_polygon([100, 50], [130, 90], [70, 90], fill="green")
с .create_polygon([100, 80], [130, 120], [70, 120], fill="green")
с .create_polygon([100, 110], [130, 150], [70, 150], fill="green")
с .create_rectangle(93,150,107,175,fill="brown", outline="brown")
t = choice(['blue','maroon','orange','red','violet'])
T = choice(['aqua','pink','purple','yellow','lime'])
с .itemconfig( с .create_oval(70,80,80,90), fill=T)
с .itemconfig( с .create_oval(120,80,130,90), fill=t)
с .itemconfig( с .create_oval(70,110,80,120,), fill=t)
с .itemconfig( с .create_oval(120,110,130,120), fill=T)
с .itemconfig( с .create_oval(70,140,80,150), fill=T)
с .itemconfig( с .create_oval(120,140,130,150), fill=t)
root.update()
Окна светят
Окно днем Окно вечером
from tkinter import *
a = True
def rect_func(event):
global a
c.delete(all)
c.create_rectangle(10, 10, 10 + x, 10 + x, fill='white', outline='black', width=1)
if a:
fon = c.create_rectangle(10+ x/20, 10+x/20, 10+x-x/20, 10+x-x/20, fill='blue',
outline='white', width=1)
c.create_rectangle(10+23*x/50, 11,10+27*x/50, 9+x, fill='white',
outline='white')
c.create_polygon(10+x/4, 10+x, 10+x/4+x/10, 10+x, 10+x/5, 10+4*x/5,
10+2*x/5,10+4*x/5, fill='orange', outline='black')
c.create_line(10+x/3.5, 10+4*x/5, 10+x/3.5, 10+3*x/5, fill='green', width=3)
c.create_oval(10+x/3.5-x/25, 10+3*x/5+x/25, 10+x/3.5+x/25, 10+3*x/5-x/25,
fill ='red')
sun = c.create_oval(10+6*x/10, 10+2*x/10, 10+8*x/10, 10+4*x/10,
fill ='yellow')
else:
fon = c.create_rectangle(10+ x/20, 10+x/20, 10+x-x/20, 10+x-x/20,
fill='lightblue', outline='white', width=1)
c.create_rectangle(10+23*x/50, 11,10+27*x/50, 9+x, fill = 'white',
outline = 'white')
c.create_polygon(10+x/4, 10+x, 10+x/4+x/10, 10+x, 10+x/5, 10+4*x/5,
10+2*x/5, 10+4*x/5, fill='orange', outline='black')
c.create_line(10+x/3.5, 10+4*x/5, 10+x/3.5, 10+3*x/5, fill='green', width=3)
c.create_oval(10+x/3.5-x/25, 10+3*x/5+x/25, 10+x/3.5+x/25, 10+3*x/5-x/25,
fill ='red')
c.create_oval(10+6*x/10, 10+2*x/10, 10+8*x/10, 10+4*x/10, fill ='yellow')
a = not a
root = Tk()
w = x = 600
c = Canvas(root, height=w, bg='white')
c.pack()
c.create_rectangle(10, 10, 10+x, 10+x, fill='white', outline='black', width=1)
fon = c.create_rectangle(10+ x/20, 10+x/20, 10+x-x/20, 10+x-x/20, fill='lightblue',
outline='white', width=1)
c.create_rectangle(10+x/2-x/25, 11,10+x/2+x/25, 9+x, fill='white', outline='white')
c.create_polygon(10+x/4, 10+x, 10+x/4+x/10, 10+x, 10+x/5, 10+4*x/5, 10+2*x/5,
10+4*x/5, fill='orange', outline='black')
c.create_line(10+x/3.5, 10+4*x/5, 10+x/3.5, 10+3*x/5, fill='green', width=3)
c.create_oval(10+x/3.5-x/25, 10+3*x/5+x/25, 10+x/3.5+x/25, 10+3*x/5-x/25,
fill ='red')
c.create_oval(10+6*x/10, 10+2*x/10, 10+8*x/10, 10+4*x/10, fill ='yellow')
c.bind('<Button-1>', rect_func)
mainloop()
Восход солнца
from tkinter import *
root = Tk()
c = Canvas(root, height=500, bg="lightblue")
c.pack()
солнце = c.create_oval(330, 230, 470, 370, fill='orange',outline="orange")
облако 1 = c.create_oval(600, 100, 750, 200, fill='white',outline="white")
облако 2 = c.create_oval(700, 100, 800, 200, fill='white',outline="white")
облако 3 = c.create_oval(650, 50, 780, 150, fill='white',outline="white")
a=c.create_polygon(0, 300, 80, 250, 160, 300,fill="white")
b=c.create_polygon(160, 300, 240, 250, 320, 300,fill="grey")
d=c.create_polygon(320, 300, 400, 250, 480, 300,fill="grey2")
e=c.create_polygon(560, 300, 640, 250, 720, 300,fill="grey3")
c.create_rectangle(0, 300, 800, 600, fill='blue',outline="blue")
def motion():
c.move( солнце , 0,-1)
c.move(a,1,0)
c.move(b,1,0)
c.move(d,1,0)
c.move(e,1,0)
c.move( облако 1,-1,0)
c.move( облако 2,-1,0)
c.move( облако 3,-1,0)
root.after(20,motion)
motion()
root.mainloop()
Движение паука
import tkinter as tk
import time
class Window(tk.Frame):
def __init__(self, parent, bg='white', height=600):
tk.Frame.__init__(self, parent, background=bg)
self.parent = parent
self.initUI()
self.parent.after(1500, self.anim)
self.parent.mainloop()
def initUI(self):
self.pack()
work_space_frame = tk.Frame(self, background='white')
work_space_frame.pack(fill='both')
w = h = 700
self.C = tk.Canvas(work_space_frame, height=h, bg='#AAAAAA')
self.C.pack()
floor = self.C.create_rectangle(0, h - 280, 700, h, fill='#707070')
self.C.create_line(0, 0, 135, 10, fill='white')
self.C.create_line(0, 0, 130, 50, fill='white')
self.C.create_line(0, 0, 100, 100, fill='white')
self.C.create_line(0, 0, 50, 130, fill='white')
self.C.create_line(0, 0, 10, 135, fill='white')
self.C.create_oval(-40, -40, 40, 40, outline='white')
self.C.create_oval(-70, -70, 70, 70, outline='white')
self.C.create_oval(-100, -100, 100, 100, outline='white')
self.C.create_oval(-130, -130, 130, 130, outline='white')
def anim(self):
spider_w = spider_h = 110
spider_body = self.C.create_oval(100,500,100+spider_w,500+spider_h, fill='#000')
self.C.update()
time.sleep(1.5)
eye_w = 12
spider_eye_left = self.C.create_oval(150,590,150+eye_w, 590 + 12, fill='#fff')
spider_eye_right = self.C.create_oval(165,590,165+eye_w,590+eye_w, fill='#fff')
eye_apple = 4
spider_eye_apple_left = self.C.create_oval(150, 590, 150 + eye_apple, 590 + eye_apple, fill='#000')
spider_eye_apple_right = self.C.create_oval(165, 590, 165 + eye_apple, 590 + eye_apple, fill='#000')
self.C.update()
time.sleep(0.5)
x = -15
y = 0
self.C.move(spider_eye_left, x, y)
self.C.move(spider_eye_right, x, y)
self.C.move(spider_eye_apple_left, x, y)
self.C.move(spider_eye_apple_right, x, y)
self.C.update()
time.sleep(0.5)
x = -5
y = -10
self.C.move(spider_eye_left, x, y)
self.C.move(spider_eye_right, x, y)
self.C.move(spider_eye_apple_left, x, y)
self.C.move(spider_eye_apple_right, x, y)
self.C.update()
time.sleep(0.5)
x = 22
y = 10
self.C.move(spider_eye_left, x, y)
self.C.move(spider_eye_right, x, y)
self.C.move(spider_eye_apple_left, x + 5, y + 3)
self.C.move(spider_eye_apple_right, x + 5, y + 3)
self.C.update()
time.sleep(0.5)
spider_leg_left_1_1 = self.C.create_line(120, 585, 70, 510, fill='#000')
spider_leg_left_1_2 = self.C.create_line(70, 510, 30, 610, fill='#000')
spider_leg_left_2_1 = self.C.create_line(120, 585, 90, 490, fill='#000')
spider_leg_left_2_2 = self.C.create_line(90, 490, 65, 590, fill='#000')
spider_leg_left_3_1 = self.C.create_line(120, 585, 80, 505, fill='#000')
spider_leg_left_3_2 = self.C.create_line(80, 505, 50, 620, fill='#000')
spider_leg_right_1_1 = self.C.create_line(185, 585, 230, 510, fill='#000')
spider_leg_right_1_2 = self.C.create_line(230, 510, 250, 610, fill='#000')
spider_leg_right_2_1 = self.C.create_line(185, 585, 220, 490, fill='#000')
spider_leg_right_2_2 = self.C.create_line(220, 490, 270, 590, fill='#000')
spider_leg_right_3_1 = self.C.create_line(185, 585, 235, 505, fill='#000')
spider_leg_right_3_2 = self.C.create_line(235, 505, 265, 620, fill='#000')
self.C.update()
time.sleep(0.05)
x = 0
y = -10
self.C.move(spider_body, x, y)
self.C.move(spider_eye_left, x, y - 10)
self.C.move(spider_eye_right, x, y - 10)
self.C.move(spider_eye_apple_left, x, y - 10)
self.C.move(spider_eye_apple_right, x, y - 10)
var_x = 4.5
var_y = 1.5
clr = '#fff'
for i in range(40):
self.C.update()
time.sleep(0.15)
x = 9
y = 0
self.C.move(spider_body, x, y)
self.C.move(spider_eye_left, x, y)
self.C.move(spider_eye_right, x, y)
self.C.move(spider_eye_apple_left, x, y)
self.C.move(spider_eye_apple_right, x, y)
self.C.move(spider_leg_left_1_1, x + var_x, y + var_y)
self.C.move(spider_leg_left_1_2, x + var_x, y + var_y)
self.C.move(spider_leg_left_2_1, x - var_x, y - var_y)
self.C.move(spider_leg_left_2_2, x - var_x, y - var_y)
self.C.move(spider_leg_left_3_1, x + var_x, y + var_y)
self.C.move(spider_leg_left_3_2, x + var_x, y + var_y)
self.C.move(spider_leg_right_1_1, x - var_x, y - var_y)
self.C.move(spider_leg_right_1_2, x - var_x, y - var_y)
self.C.move(spider_leg_right_2_1, x + var_x, y + var_y)
self.C.move(spider_leg_right_2_2, x + var_x, y + var_y)
self.C.move(spider_leg_right_3_1, x - var_x, y - var_y)
self.C.move(spider_leg_right_3_2, x - var_x, y - var_y)
if clr =='#000':
clr = '#fff'
self.C.itemconfigure(spider_eye_left, fill=clr)
self.C.itemconfigure(spider_eye_right, fill=clr)
if i % 10 == 0:
clr = '#000'
self.C.itemconfigure(spider_eye_left, fill=clr)
self.C.itemconfigure(spider_eye_right, fill=clr)
var_x = -var_x
var_y = -var_y
self.C.update()
time.sleep(0.5)
x = -18
y = 0
self.C.move(spider_eye_left, x + 3, y)
self.C.move(spider_eye_right, x + 3, y)
self.C.move(spider_eye_apple_left, x, y)
self.C.move(spider_eye_apple_right, x, y)
self.C.update()
time.sleep(0.5)
x = -5
y = -10
self.C.move(spider_eye_left, x, y)
self.C.move(spider_eye_right, x, y)
self.C.move(spider_eye_apple_left, x, y)
self.C.move(spider_eye_apple_right, x, y)
self.C.update()
time.sleep(1.5)
x = 0
y = 10
self.C.delete(spider_leg_left_1_1)
self.C.delete(spider_leg_left_1_2)
self.C.delete(spider_leg_left_2_1)
self.C.delete(spider_leg_left_2_2)
self.C.delete(spider_leg_left_3_1)
self.C.delete(spider_leg_left_3_2)
self.C.delete(spider_leg_right_1_1)
self.C.delete(spider_leg_right_1_2)
self.C.delete(spider_leg_right_2_1)
self.C.delete(spider_leg_right_2_2)
self.C.delete(spider_leg_right_3_1)
self.C.delete(spider_leg_right_3_2)
self.C.move(spider_body, x, y)
self.C.move(spider_eye_left, x, y)
self.C.move(spider_eye_right, x, y)
self.C.move(spider_eye_apple_left, x, y)
self.C.move(spider_eye_apple_right, x, y)
self.C.update()
time.sleep(0.5)
self.C.delete(spider_eye_apple_left)
self.C.delete(spider_eye_apple_right)
self.C.delete(spider_eye_left)
self.C.delete(spider_eye_right)
window = Window(tk.Tk())
Игра – ХО в консоле
def tic_tac_toe():
board = [1, 2, 3, 4, 5, 6, 7, 8, 9]
end = False
win_commbinations=((0,1,2),(3,4,5),(6,7,8), (0,3,6), (1,4,7), (2,5,8), (0,4,8), (2,4,6))
def draw():
print(board[0], board[1], board[2])
print(board[3], board[4], board[5])
print(board[6], board[7], board[8])
print()
def p1():
n = choose_number()
if board[n] == "X" or board[n] == "O":
print(" \n You can't go there. Try again")
p1()
else:
board[n] = "X"
def p2():
n = choose_number()
if board[n] == "X" or board[n] == "O":
print(" \n You can't go there. Try again")
p2()
else:
board[n] = "O"
def choose_number():
while True:
while True:
a = input()
try:
a = int(a) - 1
if a in range(0, 9):
return a
else:
print(" \n That's not on the board. Try again")
continue
except ValueError:
print(" \n That's not a number. Try again")
continue
def check_board():
count = 0
for a in win_commbinations:
if board[a[0]]==board[a[1]]==board[a[2]]=="X":
print("Player 1 Wins! \n ")
print("Congratulations! \n ")
return True
if board[a[0]]==board[a[1]]==board[a[2]]=="O":
print("Player 2 Wins! \n ")
print("Congratulations! \n ")
return True
for a in range(9):
count += board[a] == "X" or board[a] == "O"
if count == 9:
print("The game ends in a Tie \n ")
return True
while not end:
draw()
end = check_board()
if end == True:
break
print("Player 1 choose where to place a cross")
p1()
print()
draw()
end = check_board()
if end == True: break
print("Player 2 choose where to place a nought")
p2()
print()
if input("Play again (y/n) \n ") == "y":
print()
tic_tac_toe()
tic_tac_toe()
Полет мяча
import pygame
s = w , h = 1600, 600
sp = [3, 3]
black = 255, 255, 255
scr = pygame . display . set _ mode ( s )
tup = pygame . image . load ("1. png ")
t _ r = tup . get _ rect ()
while 1:
for event in pygame . event . get ():
if event . type == pygame . QUIT : sys . exit ()
t _ r = t _ r . move ( sp )
if t _ r . left < 0 or t _ r . right > w :
sp [0] = - sp [0]
if t _ r . top < 0 or t _ r . bottom > h :
sp [1] = - sp [1]
scr . fill ( black )
scr . blit ( tup , t _ r )
pygame . display . flip ()
«Полет мяча подуглом в свободном падении»
from tkinter import *
from random import randrange as rnd, choice
root = Tk()
root.geometry('900x740+100+100')
canv = Canvas(bg='aqua')
canv.pack(fill=BOTH, expand=1)
vx = 2
vy = 1
r = 25
x = y = 50
vX = -2
vY = -1
R = 25
X = 780
Y = 70
canv.create_rectangle(50 - r, 50 - r, 850 + r, 690 + r)
canv.create_rectangle(50-r,650+r,850+r,690+r, \ fill='green') def update():
global x, y, vx, vy
x += vx
y += vy
if x > 850:
vx = -vx
x = 850
if x < 50:
vx =-vx
x = 50
if y > 650:
vy *= -0.975
y = 650
vx *= 0.975
if y < 50:
vy = -vy
y = 50
vy += 1
canv.delete('ball')
canv.create_oval(x-r, y-r,x+r,y+r, fill='yellow', \ tag='ball')
canv.delete('AY')
canv.create_oval(X-50,Y-20,X+50,Y+70, \ fill='orange',outline="aqua", \ tag='AY')
canv.delete('Ay')
canv.create_oval(X-65,Y-15,X+25,Y+80,fill='aqua', \ outline="aqua", tag='Ay')
root.after(30, update)
def sign(d) : return 1 if d>0 else 1def click(event):
global vy, vx
dx = event.x - x
dy = event.y - y
if dx != 0 and dy != 0:
vx = 20 * sign(dx)
vy = 20 * sign(dy)
canv.bind('<1>', click)
update()
root.mainloop()
«Вращение рисунка с помощью мыши»
На экране изображена кошка и с помощью мыши производится разворот головы мыши.
from tkinter import *
c = Canvas(height=800, cursor = "pencil")
c.create_line(400, 800, 400, 0, arrow=LAST)
c.create_line(0, 400, 800, 400, arrow=LAST)
c.pack()
xy = [(304, 247), (343, 145), (370, 176), (410, 166),(456, 176), (484, 132), (505, 256), (451, 298), (353, 301)]
polygon_item = c.create_polygon(xy, outline='brown', fill='peru', width=4)
i=0
def getangle(event):
dx = c.canvasx(event.x) - center[0]
dy = c.canvasy(event.y) - center[1]
try:
return complex(dx, dy) / abs(complex(dx, dy))
except ZeroDivisionError:
return 0.0
def press(event):
global start, i
if i==0:
x1 = event.x
y1 = event.y
c.create_line(x1-4,y1-4, x1 + 4, y1 + 4, width=2)
c.create_line(x1-4, y1+4, x1 + 4, y1 - 4, width=2)
global center
center = x1, y1
i=1
start = getangle(event)
def motion(event):
global start
угол = getangle(event) / start
offset = complex(center[0], center[1])
newxy = []
for x, y in xy:
v = угол * (complex(x, y) - offset) + offset
newxy.append(v.real)
newxy.append(v.imag)
c.coords(polygon_item, *newxy)
c.bind("<Button-1>", press)
c.bind("<B1-Motion>", motion)
mainloop()
В результате выдаст
«Ловля шариков»
На экране случайно появляется изображение шарика, который надо отметить мышкой. В случае нажатия левой кнопки мыши при наведении его указателя на шар игрок получает 1 очко. В углу указывается число пойманных шаров.
from tkinter import *
from random import randrange as rnd, choice
import time
root = Tk()
root.geometry('800x600')
canv = Canvas(root, bg='white')
canv.pack(fill=BOTH, expand=1)
colors = ['#CC6666','#FF9966','#9999FF','#CCCC99']
def new_ball(): # воспроизведение образа нового случайного шара
global x, y, r, kol
canv.delete(ALL)
x = rnd(100, 700)
y = rnd(100, 500)
r = rnd(30, 50)
kol+=1
canv.create_text(20, 20, text=str(points)+' '+str(kol), font='Arial 22')
if points==10 or kol>30:
if points>9 : canv.create_text(400, 300, text=str('YOU WIN'), font='Arial 22')
else : canv.create_text(400, 300, text=str('YOU LOST'), font='Arial 20')
canv.sleep(5)
exit(0)
canv.create_oval(x - r, y - r, x + r, y + r, fill=choice(colors), width=0)
root.after(1000, new_ball)
def click(event): # проверка при нажатии клавиши мыши
global points
if (event.y - y) ** 2 + (event.x - x) ** 2 <= r ** 2:
points += 1
points = 0 # число пойманных шаров
kol = 0 # число изображенных шаров
new_ball()
canv.bind('<Button-1>', click)
mainloop()
Графические редакторы
Пример графического мозаичного редактора 1.
Начальное состояние порисовали
from random import *
from tkinter import *
c = Canvas(width=1500,height=1500,bg='#ffffff')
c.pack()
i=0
j=0
for i in range (0,16):
for j in range (0,16):
c.create_rectangle(i*40,j*40,i*40+40,j*40+40,fill="yellow")
def click(event):
colour=choice(['aqua','blue','fuchsia','green', 'maroon', 'orange','pink', 'purple', 'red','yellow', 'violet', 'indigo', 'chartreuse', 'lime'])
if(event.y<640 and event.x<640):
c.create_rectangle(event.x//40*40,event.y//40*40,event.x//40*40+40,event.y//40*40+40,fill=colour)
c.bind('<Button-1>',click)
mainloop()
Пример графического редактора 2.
from tkinter import *
class Paint(Frame):
def __init__(self, parent):
Frame.__init__(self, parent)
self.parent = parent
self.color = "black"
self.brush_size = 2
self.setUI()
def set_color(self, new_color):
self.color = new_color
def set_brush_size(self, new_size):
self.brush_size = new_size
def draw(self, event):
self.canv.create_oval(event.x - self.brush_size,
event.y - self.brush_size,
event.x + self.brush_size,
event.y + self.brush_size,
fill=self.color, outline=self.color)
def setUI(self):
self.parent.title("Паинт")
self.pack(fill=BOTH, expand=1)
self.columnconfigure(6, weight=1)
self.rowconfigure(2, weight=1)
self.canv = Canvas(self, bg="grey")
self.canv.grid(row=2, column=0, columnspan=7,
padx=5, pady=5, sticky=E+W+S+N)
self.canv.bind("<B1-Motion>", self.draw)
color_lab = Label(self, text="Цвета")
color_lab.grid(row=0, column=0, padx=6)
red_btn = Button(self, text="Красный", width=10,
command=lambda: self.set_color("red"))
red_btn.grid(row=0, column=1)
green_btn = Button(self, text="Зеленый", width=10,
command=lambda: self.set_color("green"))
green_btn.grid(row=0, column=2)
blue_btn = Button(self, text="РЎРёРЅРёР№", width=10,
command=lambda: self.set_color("blue"))
blue_btn.grid(row=0, column=3)
black_btn = Button(self, text="Черный", width=10,
command=lambda: self.set_color("black"))
black_btn.grid(row=0, column=4)
white_btn = Button(self, text="Белый", width=10,
command=lambda: self.set_color("white"))
white_btn.grid(row=0, column=5)
clear_btn = Button(self, text="Очистить все", width=10,
command=lambda: self.canv.delete("all"))
clear_btn.grid(row=0, column=6, sticky=W)
size_lab = Label(self, text="Размер кисти")
size_lab.grid(row=1, column=0, padx=5)
one_btn = Button(self, text="1", width=10,
command=lambda: self.set_brush_size(1))
one_btn.grid(row=1, column=1)
two_btn = Button(self, text="2", width=10,
command=lambda: self.set_brush_size(2))
two_btn.grid(row=1, column=2)
five_btn = Button(self, text="3", width=10,
command=lambda: self.set_brush_size(3))
five_btn.grid(row=1, column=3)
seven_btn = Button(self, text="4", width=10,
command=lambda: self.set_brush_size(4))
seven_btn.grid(row=1, column=4)
ten_btn = Button(self, text="5", width=10,
command=lambda: self.set_brush_size(5))
ten_btn.grid(row=1, column=5)
twenty_btn = Button(self, text="6", width=10,
command=lambda: self.set_brush_size(6))
twenty_btn.grid(row=1, column=6, sticky=W)
def main():
root = Tk()
root.geometry("600x500+300+300")
app = Paint(root)
root.mainloop()
if __name__ == '__main__':
main()