2014-12-20 5 views
1

Я только что начал Python несколько дней назад, и я получил анимацию. Я работаю над одним, называемым «Bounce!», И он имеет это имя на экране, с другими настройками. Настройки - FPS и скорость (приращение). Но, поскольку овальный отскок, эти настройки меняются, и я хочу, чтобы текст изменился вместе с ним, но я не знаю, как это сделать. Это мой текущий код:Python tkinter text text transitioning

import time 
from tkinter import * 
tk = Tk() 
fps=30 
increment=2 
canvas = Canvas(tk,height='500',width='500') 
canvas.pack() 
canvas.create_oval(175,100,325,250,fill='red',outline='black') 
canvas.create_line(50,100,450,100) 
canvas.create_line(50,450,450,450) 
canvas.create_text(250,30,text='Bounce!',fill='red',font=('Consolas',30)) 
x = canvas.create_text(250,75,text=('FPS: %s; Speed: %s'% (fps,increment)),fill='black',font=('Consolas',20)) #mainproblem 

while True: 
    increment += 1 
    if increment % 2 == 0 and fps > 1: 
     fps = fps - 1 
    #I want the 'x' text to change to the current FPS and Speed here, but I do not know how. 
    for x in range(0, int(200/increment)): 
     canvas.move(1,0,increment) 
     tk.update() 
     time.sleep(1/fps) 
    for x in range(0, int(200/increment)): 
     canvas.move(1,0,-(increment)) 
     tk.update() 
     time.sleep(1/fps) 

Я использую Python 3.4.2.

+1

Tkinter не предназначен для использования таким образом, - в общем, вы никогда не должны вызывать 'sleep' в графическом интерфейсе, не может иметь свой собственный бесконечный цикл. Есть, я думаю, несколько вопросов и ответов о выполнении анимации в tkinter на этом сайте, и все это вращается вокруг запуска mainloop и вызывает 'after' для запуска функций периодически. –

ответ

0
import time 
from tkinter import * 
tk = Tk() 
fps=30 
increment=2 
t = ('FPS: %s; Speed: %s'% (fps,increment)) 
canvas = Canvas(tk,height='500',width='500') 
canvas.pack() 
canvas.create_oval(175,100,325,250,fill='red',outline='black') 
canvas.create_line(50,100,450,100) 
canvas.create_line(50,450,450,450) 
canvas.create_text(250,30,text='Bounce!',fill='red',font=('Consolas',30)) 
w = canvas.create_text(250,75,text= t,fill='black',font=('Consolas',20)) #mainproblem 

while True: 
    increment += 1 
    if increment % 2 == 0 and fps > 1: 
     fps = fps - 1 
    t = ('FPS: %s; Speed: %s'% (fps,increment)) 

    canvas.itemconfig(w, text= t) 

    for x in range(0, int(200/increment)): 
     canvas.move(1,0,increment) 
     tk.update() 
     time.sleep(1/fps) 
    for x in range(0, int(200/increment)): 
     canvas.move(1,0,-(increment)) 
     tk.update() 
     time.sleep(1/fps) 
+2

По крайней мере, укажите минимальное описание того, как исправить проблему, поэтому вам не нужно сравнивать весь код, символ по символу, с оригиналом. –

2

Вы можете использовать itemconfigure, чтобы изменить настройки элементов на холсте (см. here). Также обратите внимание, что ваша переменная цикла x затеняет переменную, которой вы присвоили идентификатор текста.

text = canvas.create_text(...) 
    ... 
    canvas.itemconfigure(text, text=('FPS: %s; Speed: %s'% (fps,increment))) 
Смежные вопросы