Tkinter画布小部件

Tkinter画布小部件,tkinter,python-3.3,Tkinter,Python 3.3,我以前用python编写过代码,但很少使用tkinter。我已经写了这段代码,我不明白为什么它不工作。我在网上查过了,什么也没找到。这以前发生过,但不幸的是我找不到程序 这是密码 from tkinter import * import time import threading import random C = Canvas() class ball(threading.Thread): def run(self): x = 1 y = 1

我以前用python编写过代码,但很少使用tkinter。我已经写了这段代码,我不明白为什么它不工作。我在网上查过了,什么也没找到。这以前发生过,但不幸的是我找不到程序

这是密码

from tkinter import *
import time
import threading
import random
C = Canvas()
class ball(threading.Thread):
    def run(self):
        x =  1
        y =  1
        ball = C.create_oval(0,0,10,10,fill = "Green")
        C.pack()
        while True:
            C.move(ball,x,y)
            C.update()
            time.sleep(0.03)
            if C.coords(ball)[0] > 200:
                x = x - random.randint(1,2)
                if x > 2:
                    x = 2
                elif x < -2:
                    x = -2
            if C.coords(ball)[1] > 200:
                y = y - random.randint(1,2)
                if y > 2:
                    y = 2
                elif y < -2:
                    y = -2
            if C.coords(ball)[0] < 0:
                x = x + random.randint(1,2)
                if x > 2:
                    x = 2
                elif x < -2:
                    x = -2
            if C.coords(ball)[1] < 0:
                y = y + random.randint(1,2)
                if y > 2:
                    y = 2
                elif y < -2:
                    y = -2



for i in range(3):
    class Child(ball):
        pass
    childball = Child()
    childball.start()
    time.sleep(1)
例如,它每次都会返回不同的错误

Exception in thread Thread-1:
Traceback (most recent call last):
  File "C:\Python33\lib\threading.py", line 901, in _bootstrap_inner
    self.run()
  File "C:/Python33/Game.py", line 35, in run
    if C.coords(ball)[0] < 0:
  File "C:\Python33\lib\tkinter\__init__.py", line 2299, in coords
    self.tk.call((self._w, 'coords') + args))]
_tkinter.TclError: bad option "35.0 34.0 45.0 44.0": must be addtag, bbox, bind, canvasx, canvasy, cget, configure, coords, create, dchars, delete, dtag, find, focus, gettags, icursor, index, insert, itemcget, itemconfigure, lower, move, postscript, raise, scale, scan, select, type, xview, or yview

Exception in thread Thread-2:
Traceback (most recent call last):
  File "C:\Python33\lib\threading.py", line 901, in _bootstrap_inner
    self.run()
  File "C:/Python33/Game.py", line 23, in run
    if C.coords(ball)[0] > 200:
  File "C:\Python33\lib\tkinter\__init__.py", line 2299, in coords
    self.tk.call((self._w, 'coords') + args))]
_tkinter.TclError: invalid command name "89.0 49.0 99.0 59.0"


任何人都可以提供帮助。

除了创建小部件的线程外,您不能在任何线程中访问tkinter小部件-tkinter不是设计用于多线程的

如果你所做的只是简单的动画,你不需要线程。给出了一个使用tkinter的after方法制作动画的示例

Exception in thread Thread-3:
Traceback (most recent call last):
  File "C:\Python33\lib\threading.py", line 901, in _bootstrap_inner
    self.run()
  File "C:/Python33/Game.py", line 23, in run
    if C.coords(ball)[0] > 200:
  File "C:\Python33\lib\tkinter\__init__.py", line 2299, in coords
    self.tk.call((self._w, 'coords') + args))]
  File "C:\Python33\lib\tkinter\__init__.py", line 2297, in <listcomp>
    return [getdouble(x) for x in
ValueError: could not convert string to float: 'coords'