da meine threads immer gerne mal ohne offensichtlichen Grund abstürzen hab ich mir ein Testprogramm mit nur einem Thread geschrieben, um zu verstehen was ich falsch mache. Auch mit dem Programm ist mir leider nicht klargeworden, warum das Programm abstürzt.
Es soll ein Bild beim Drücken der rechten Pfeiltase nach rechts bewegen:
Code: Alles auswählen
import Image
import Tkinter
import Canvas
import time
from threading import *
from ImageTk import *
class Raumschiff(Thread):
def __init__(self,armor,maxhealth,speed,imagepfad):
Thread.__init__(self)
self.image=PhotoImage(Image.open(imagepfad))
self.movement=Event()
#self.lockment=Lock()
self.x=100
self.y=200
def erscheine(self,master,x,y):
self.frame=Tkinter.Frame(master,bg="green",height="40",width="100")
self.frame.place(x=self.x,y=self.y)
self.canvas=Tkinter.Canvas(self.frame,height="40",width="100", bg="red")
self.canvas.pack()
self.c_image=self.canvas.create_image(x,y,image=self.image)
print self.c_image
def move(self,event):
print "move"
self.movement.set()
def stopmoving(self,event):
print "stopmove"
self.movement.clear()
def run(self):
count=1
while 1:
#self.lockment.acquire()
self.movement.wait()
print count," run ",self.x,self.y
self.x+=1
self.frame.place(x=self.x,y=self.y)
count+=1
time.sleep(0.1)
#self.lockment.release()
class Gui:
def __init__(self):
self.fenster=Tkinter.Tk()
self.fenster.geometry("800x600")
self.canvas=Tkinter.Canvas(self.fenster,height="600",width="800", bg="black")
self.canvas.pack()
self.test_raumschiff=Raumschiff(10,100,20,"Bilder/test.bmp")
self.test_raumschiff.erscheine(self.fenster,100,200)
self.test_raumschiff.start()
self.fenster.bind("<KeyPress-Right>",self.test_raumschiff.move)
self.fenster.bind("<KeyRelease-Right>",self.test_raumschiff.stopmoving)
my_gui=Gui()
print "ENDE"