Приветствую, это Дима!
Я расскажу как сделать своего Desktop питомца.
Коротко о Desktop питомцах, это виртуальные питомцы у вас на экране ПК.
И так... Начнем с импортирования:
import random
import tkinter as tk
Рандом нужен для действий питомца, а tkinter поможет в остальном.
Для начала заведём несколько переменных:
x = 1400
cycle = 0
check = 1
idle_num =[1,2,3,4]
sleep_num = [10,11,12,13,15]
walk_left = [6,7]
walk_right = [8,9]
event_number = random.randrange(1,3,1)
impath = 'C:\\Укажите\\тут\\путь\\в папку\\с картинками\\'
Далее делаем передачу случайного номера к событию:
def event(cycle,check,event_number,x):
if event_number in idle_num:
check = 0
print('idle анимация')
window.after(400,update,cycle,check,event_number,x)#номера 1,2,3,4 = idle анимация
elif event_number == 5:
check = 1
print('С idle анимации в спящую')
window.after(100,update,cycle,check,event_number,x) #номер 5 = с idle анимации в спящую
elif event_number in walk_left:
check = 4
print('Идет налево')
window.after(100,update,cycle,check,event_number,x)#номера 6,7 = идет налево
elif event_number in walk_right:
check = 5
print('Идет направо')
window.after(100,update,cycle,check,event_number,x)#номера 8,9 = идет направо
elif event_number in sleep_num:
check = 2
print('Спит')
window.after(1000,update,cycle,check,event_number,x)#номера 10,11,12,13,15 = спит
elif event_number == 14:
check = 3
print('Со спящей в idle анимацию')
window.after(100,update,cycle,check,event_number,x)#номер 15 = со спящей в idle анимацию
Print можете убрать (он для удобства).
Заставляем gif работать:
def gif_work(cycle,frames,event_number,first_num,last_num):
if cycle < len(frames) -1:
cycle =1
else:
cycle = 0
event_number = random.randrange(first_num,last_num 1,1)
return cycle,event_number
def update(cycle,check,event_number,x):
#idle
if check ==0:
frame = idle[cycle]
cycle ,event_number = gif_work(cycle,idle,event_number,1,9)
#С idle в спящую
elif check ==1:
frame = idle_to_sleep[cycle]
cycle ,event_number = gif_work(cycle,idle_to_sleep,event_number,10,10)
#спящая
elif check == 2:
frame = sleep[cycle]
cycle ,event_number = gif_work(cycle,sleep,event_number,10,15)
#Со спящей в idle
elif check ==3:
frame = sleep_to_idle[cycle]
cycle ,event_number = gif_work(cycle,sleep_to_idle,event_number,1,1)
#Ходьба налево
elif check == 4:
frame = walk_positive[cycle]
cycle , event_number = gif_work(cycle,walk_positive,event_number,1,9)
x -= 3
#Ходьба направо
elif check == 5:
frame = walk_negative[cycle]
cycle , event_number = gif_work(cycle,walk_negative,event_number,1,9)
x -= 3
window.geometry('100x100 ' str(x) ' 1050')
label.configure(image=frame)
window.after(1,event,cycle,check,event_number,x)
window = tk.Tk()
Действия по вызову gif (если вы ставите свои, то замените названия гифок в коде на названия ваших гифок):
idle = [tk.PhotoImage(file=impath 'idle.gif',format = 'gif -index %i' %(i)) for i in range(5)]#idle gif
idle_to_sleep = [tk.PhotoImage(file=impath 'idle_to_sleep.gif',format = 'gif -index %i' %(i)) for i in range(8)]#с idle в спящую gif
sleep = [tk.PhotoImage(file=impath 'sleep.gif',format = 'gif -index %i' %(i)) for i in range(3)]#спящая gif
sleep_to_idle = [tk.PhotoImage(file=impath 'sleep_to_idle.gif',format = 'gif -index %i' %(i)) for i in range(8)]#со спящей в idle gif
walk_positive = [tk.PhotoImage(file=impath 'walking_positive.gif',format = 'gif -index %i' %(i)) for i in range(8)]#идёт на лево gif
walk_negative = [tk.PhotoImage(file=impath 'walking_negative.gif',format = 'gif -index %i' %(i)) for i in range(8)]#идёт на право gif
Конфигурация окна:
window.config(highlightbackground='black')
label = tk.Label(window,bd=0,bg='black')
window.overrideredirect(True)
window.wm_attributes('-transparentcolor','black')
label.pack()
Цикл выполнения программы:
window.after(1,update,cycle,check,event_number,x)
window.mainloop()
Полный код:
import random
import tkinter as tk
x = 1400
cycle = 0
check = 1
idle_num =[1,2,3,4]
sleep_num = [10,11,12,13,15]
walk_left = [6,7]
walk_right = [8,9]
event_number = random.randrange(1,3,1)
impath = 'C:\\Укажите\\тут\\путь\\в папку\\с картинками\\'
#передача случайного номера к событию
def event(cycle,check,event_number,x):
if event_number in idle_num:
check = 0
print('idle анимация')
window.after(400,update,cycle,check,event_number,x)#номера 1,2,3,4 = idle анимация
elif event_number == 5:
check = 1
print('С idle анимации в спящую')
window.after(100,update,cycle,check,event_number,x) #номер 5 = с idle анимации в спящую
elif event_number in walk_left:
check = 4
print('Идет налево')
window.after(100,update,cycle,check,event_number,x)#номера 6,7 = идет налево
elif event_number in walk_right:
check = 5
print('Тдет направо')
window.after(100,update,cycle,check,event_number,x)#номера 8,9 = идет направо
elif event_number in sleep_num:
check = 2
print('Спит')
window.after(1000,update,cycle,check,event_number,x)#номера 10,11,12,13,15 = спит
elif event_number == 14:
check = 3
print('Со спящей в idle анимацию')
window.after(100,update,cycle,check,event_number,x)#номер 15 = со спящей в idle анимацию
#заставляем gif работать
def gif_work(cycle,frames,event_number,first_num,last_num):
if cycle < len(frames) -1:
cycle =1
else:
cycle = 0
event_number = random.randrange(first_num,last_num 1,1)
return cycle,event_number
def update(cycle,check,event_number,x):
#idle
if check ==0:
frame = idle[cycle]
cycle ,event_number = gif_work(cycle,idle,event_number,1,9)
#С idle в спящую
elif check ==1:
frame = idle_to_sleep[cycle]
cycle ,event_number = gif_work(cycle,idle_to_sleep,event_number,10,10)
#спящая
elif check == 2:
frame = sleep[cycle]
cycle ,event_number = gif_work(cycle,sleep,event_number,10,15)
#Со спящей в idle
elif check ==3:
frame = sleep_to_idle[cycle]
cycle ,event_number = gif_work(cycle,sleep_to_idle,event_number,1,1)
#Ходьба налево
elif check == 4:
frame = walk_positive[cycle]
cycle , event_number = gif_work(cycle,walk_positive,event_number,1,9)
x -= 3
#Ходьба направо
elif check == 5:
frame = walk_negative[cycle]
cycle , event_number = gif_work(cycle,walk_negative,event_number,1,9)
x -= -3
window.geometry('100x100 ' str(x) ' 1050')
label.configure(image=frame)
window.after(1,event,cycle,check,event_number,x)
window = tk.Tk()
#действие по вызову gif
idle = [tk.PhotoImage(file=impath 'idle.gif',format = 'gif -index %i' %(i)) for i in range(5)]#idle gif
idle_to_sleep = [tk.PhotoImage(file=impath 'idle_to_sleep.gif',format = 'gif -index %i' %(i)) for i in range(8)]#с idle в спящую gif
sleep = [tk.PhotoImage(file=impath 'sleep.gif',format = 'gif -index %i' %(i)) for i in range(3)]#спящая gif
sleep_to_idle = [tk.PhotoImage(file=impath 'sleep_to_idle.gif',format = 'gif -index %i' %(i)) for i in range(8)]#со спящей в idle gif
walk_positive = [tk.PhotoImage(file=impath 'walking_positive.gif',format = 'gif -index %i' %(i)) for i in range(8)]#идёт на лево gif
walk_negative = [tk.PhotoImage(file=impath 'walking_negative.gif',format = 'gif -index %i' %(i)) for i in range(8)]#идёт на право gif
#Конфигурация окна
window.config(highlightbackground='black')
label = tk.Label(window,bd=0,bg='black')
window.overrideredirect(True)
window.wm_attributes('-transparentcolor','black')
label.pack()
#Цикл выполнения программы
window.after(1,update,cycle,check,event_number,x)
window.mainloop()
В качестве gif можно использовать: гифки по ссылке
Не советую вдаваться в подробности =)
Спасибо за внимание! Поддержите лайком!
Итог:

