Verfasst: Montag 26. Januar 2004, 16:05
Hallo Niko
Habe meinen Vorschlag für deinen Abakus
noch ein bisschen erweitert
Linke Maustaste = Schieb rechts
Rechte Maustaste = Schiebe links
Slogan:
"TKINTER and PYTHON is just a FANTASTIC combination!!"
Gruss wuf 
Habe meinen Vorschlag für deinen Abakus
noch ein bisschen erweitert
Linke Maustaste = Schieb rechts
Rechte Maustaste = Schiebe links
Slogan:
"TKINTER and PYTHON is just a FANTASTIC combination!!"
Code: Alles auswählen
from Tkinter import *
def MoveRight(perle):
#~~ Schiebt Objekt nach rechts
print "pos = ", cv.bbox(perle),perle
pos = cv.bbox(perle)
#~~ Kontrolle ob eine Perle im Weg ist oder rechtes Rahmenende
enclosed = cv.find_enclosed(pos[0]+r,pos[1],pos[2]+r,pos[3])
if enclosed == ():
if pos[0] < numcol*s:
cv.move(perle,+s,0)
cv.itemconfigure(perle,fill="darkolivegreen3")
def MoveLeft(perle):
#~~ Schiebt Objekt nach links
pos = cv.bbox(perle)
#~~ Kontrolle ob eine Perle im Weg ist oder linkes Rahmenende
enclosed = cv.find_enclosed(pos[0]-r,pos[1],pos[2]-r,pos[3])
if enclosed == ():
if pos[0] > s:
cv.move(perle,-s,0)
cv.itemconfigure(perle,fill="green")
# ->>----THE-ABACUS-APPLICATION----<<-
if __name__ == '__main__':
root = Tk()
root.title("Abakus-Prototyp")
root['bg'] = 'steelblue3'
cv = Canvas(root,height=450,width=250,bd=4,relief=RAISED,bg='khaki2')
cv.pack()
usingIDLE = 0
r = 30 # Durchmesser der Perle
s = r+2 # Linker Anschlag für Perlen
gap = 6 # Vertikaler Zwischenraum
numcol = 5 # Anzahl Perlen pro Perlenreihe
numrows = 9 # Anzahl der Perlenreihen
dicke = 4 # Dicke der Reihenstange
top = r # Oberes Rahmenende
left = s # Linkes Rahmenende
right = left+(numcol+1)*r+8 #Rahmenende rechts
bottom = top+(numrows*r)+(numrows*gap) # Rahmenende unten
ypos = 0 # Vertikalposition der Reihenstange
yg = 0 # Hilfsvariable
#~~ Erzeugt Stangen
for rod in range(numrows):
ypos = s+(r/2+1)+yg+rod*r
stange = cv.create_line(left,
ypos,
right,
ypos,
fill='darkolivegreen4',
width=dicke)
yg += gap
#~~ Erzeugt Abakusrahmen
rectangle = cv.create_rectangle(left-2,
top-4,
right,bottom+4,
width= 8,
outline='darkgoldenrod4'
)
#~~ Erzeugt die Perlen
for x in range(numcol):
yg = 0
for y in range(numrows):
x0 = s+x*r
y0 = s+yg+y*r
x1 = s+(x+1)*r
y1 = s+yg+(y+1)*r
yg += gap
# Zeichne Perle
object = cv.create_oval(x0,y0,x1,y1,fill='green',outline='darkgreen')
# Event für die Rechtschiebung
cv.tag_bind(object,"<Button-1>",lambda e,Object=object:MoveRight(Object))
# Event für die Linksschiebung
cv.tag_bind(object,"<Button-3>",lambda e,Object=object:MoveLeft(Object))
quit = Button(root, text="Beenden", width=10, command=root.destroy)
quit.pack(side="bottom",pady=4)
if not usingIDLE:
root.mainloop()
