我以前用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"
和
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'
任何人都可以提供帮助。
答案 0 :(得分:0)
除了创建小部件的线程外,您无法访问任何线程中的tkinter小部件 - tkinter不适用于多个线程。
如果您所做的只是简单的动画,则不需要线程。 This answer给出了使用tkinter的after
方法进行动画的示例。