1

几天前我刚开始使用 Python,并且已经开始使用动画。我正在开发一款名为“Bounce!”的产品,它在屏幕上显示了该名称以及其他设置。设置为 FPS 和速度(增量)。但是,随着椭圆的反弹,这些设置会发生变化,我希望文本也随之变化,但我不知道怎么做。这是我当前的代码:

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。

4

2 回答 2

2

您可以使用itemconfigure来更改画布上元素的设置(请参见此处)。另请注意,您的循环变量x正在隐藏您分配文本 ID 的变量。

text = canvas.create_text(...)
    ...
    canvas.itemconfigure(text, text=('FPS: %s; Speed: %s'% (fps,increment)))
于 2014-12-20T16:33:29.590 回答
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)
于 2014-12-20T16:38:30.097 回答