Найти - Пользователи
Полная версия: python анимирование
Начало » GUI » python анимирование
1 2
Vadimoto
приветствую, помогите плиз, задача в чем. Сцены для анимации. Дом и его окружение. Движение солнца.
(Дом и окружение с этим все ясно)Вопрос в следующем. как осуществить движение солнца?(солнце в jpg) буду очень признателен за помощь
4kpt
Можно воспользоваться Tkinter и объектом Canvas.
1. Качаете и импортируете PIL.
2. Выполняете инструкцию импортирования:
import Tkinter
import Image
import ImageTk
2. Сниматее данные с фотографии (в Вашем случае это фотография солнца)
Img = Image.open(file_foto_name)
3. Выполняете кодирование фотографии для возможности вставки в другие виджеты Tkinter
Img_x = ImageTk.PhotoImage(Img)
4. Создаете полотно (canvas)
Canvas_img = Tkinter.Canvas(root, height = **Высота всего рисунка, width = **Ширина всего рисунка)
5. Связываем полотно и Ваше переконвертированное изображение
S = Canvas_img.create_image(**Первая позицияХ, **Первая позицияУ, image = Img_x, anchor = "nw")
6. С помощью цикла динамически меняеете размещение Вашаго рисунка:
for posx in range(**Первая позицияХ, **Последняя позицияХ + 1):
    Canvas_img.move(S, приращение по Х, **Первая позицияУ) 
    Canvas_img.update_idletasks()

Где стоят ** Нужно ввести число….
4kpt
Если так не понятно, могу выложить пример. Только солнца у меня нет….
Vadimoto
спасибо большое, а с рисунком GIF не нужно же лишний действий? конверт.и все прочее.. Выложите пример пожалуйста.Спасибо
4kpt
Выложу вечером. Сейчас занят. Если до этого времени никто другой не даст примера…
Да, gif конвертировать не нужно, но нужно…
4kpt
Получите пример…
# -*- coding:utf-8 -*-
import ImageTk
import Tkinter
import time
root = Tkinter.Tk()
root.geometry("800x800+0+0")
img = ImageTk.PhotoImage(file = "001.gif")
cnv = Tkinter.Canvas(root, height = 700, width = 700)
cnv.pack()
S = cnv.create_image(100, 600, image = img, anchor = "nw")
def move_img(event = None):
    for i in range(41): # Всего шагов
        time.sleep(0.1) # Выставляется время шага
        #Выставляется направление и длина шага относительно начальных Х и У
        if i < 20: # от нижнего угла к верхнему двадцать шагов
            cnv.move(S, 10, -10)
        else: # через 20 шагов от верхнего к нижнему остальные 20
            cnv.move(S, 10, 10)
        cnv.update_idletasks() # Отобразить каждый шаг на экране
but = Tkinter.Button(root, text = u"Запустить движение")
but.bind("<Button-1>", move_img)
but.pack()
root.mainloop()

P.S. Не забудьте предварительно создать файл “001.gif” в той же папке, где буте располагаться Ваш листинг. Для корректной работы программы рационально, чтобы размез “001.gif” составлял 50Х50 пикселей…
Vadimoto
Благодарю, а вот можно еще спросить. Что в строке
but.bind(“<Button-1>”, move_img) вместо <Button-1> что вставлять?или как сделать движение без кнопки?
4kpt
Заменяешь строки:
but = Tkinter.Button(root, text = u"Запустить движение")
but.bind("<Button-1>", move_img)
but.pack()
на строку
move_img()
Это автоматически запустит функцию move_img без аргументов после прочтения всех предыдущих строк…
Vadimoto
Прошу прощения за мою тупость в программировании)но в чем ошибка?
4kpt
Вам нужно сначала установить PIL (Python Image Librery). Не забудьте, что он должен быть под Ваш Python…
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB