2014-12-20 63 views
1

我剛剛在幾天前啓動了Python,並且已經開始動畫了。我正在研究一個名爲「Bounce!」的工具,並在屏幕上顯示該名稱以及其他設置。設置爲FPS和速度(增量)。但是,當一個橢圓形彈起時,這些設置會改變,我希望文字隨之改變,但我不知道如何改變。這是我當前的代碼:Python tkinter模塊文本轉換

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'在GUI中,也有自己的無限循環。我想,在這個網站上有關於在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正在遮蓋您分配文本ID的變量。

text = canvas.create_text(...) 
    ... 
    canvas.itemconfigure(text, text=('FPS: %s; Speed: %s'% (fps,increment)))