ok ich bin bissal weitergekommen aber jetz steck ich
Das Programm kann zur Zeit:
- Mit der Klasse lassen sich Rauten mit Textfeldern drin erstellen
- Diese Rauten lassen sich per drag and drop verschieben und die Textfelder wandern mit
- der Text in den Textfeldern ist zentriert
so weit funktioniert alles gut
Ziele(bitte helft mir bei den ersten zwei, für 3 und 4 vllt habt ihr ja eine Idee
):
1- wenn die anzahl der Zeichen von Textfeld 8 zeichen überschreitet soll eine weitere Zeile eingefügt werden
2- wenn man dann zwei Zeilen hat, Zeichen löscht und daher wieder unter 8 zeichen kommt wird wieder auf ein einzeiliges Textfeld gewechselt
(3-) sobald das Textfeld zu viele Zeichen beinhaltet alsdass sie in zwei zeilen bei standardgröße der Raute untergebracht werden könnten soll die Raute vergrößert werden und das noch immer zweizeilige Textfeld mit mehr Zeichen verlängert werden
((4-)) zwischen den Rauten soll man linien ziehen können indem man mit der rechten maustaste auf die erste Raute1 dann auf die zweite Raute2 drückt und als folge eine Linie zwischen Raute1 und Raute2 erzeugt
.....XDD
hier der derzeitige Code:
Code: Alles auswählen
#!/usr/bin/env python
# -*- coding: UTF-8 -*-
# Scriptname: visualpython.py (David Dürnwirth 23.07.2008)
# Funktion: Graphische Erstellung von Flussdiagrammen
# und deren Umwandlung in Code
import Tkinter as tk
def mouse_button1(mouse,object):
"""Maus fasst das Grafik-Objekt"""
cv.drag_drop_flag = True
tags = cv.gettags(object)
if tags != ():
object = tags[0]
#~~ Hebt das selektierte Objekt über die anderen
cv.tag_raise(object,None)
#~~ Drag-Koordinaten
cv.mouse_x = mouse.x
cv.mouse_y = mouse.y
def mouse_release1():
"""Maus lässt Grafik-Objekt fallen"""
cv.drag_drop_flag = False
def mouse_move(mouse,object):
"""Maus bewegt sich über das Grafik-Objekt"""
tags = cv.gettags(object)
if tags != ():
object = tags[0]
if cv.drag_drop_flag == True:
#~~ Ermittle den Koordinaten-Offset
xoff = mouse.x - cv.mouse_x
yoff = mouse.y - cv.mouse_y
#~~ Verschiebe das Grafik Objekt
cv.move(object,xoff,yoff)
#~~ Aktuelle Koordinaten
cv.mouse_x = mouse.x
cv.mouse_y = mouse.y
def mouse_enter(event):
"""Mause bewegt sich ins grafische Objekt"""
cv.temp_cursor = cv['cursor']
cv['cursor'] = 'hand1'
def mouse_leave(event):
"""Mause bewegt sich aus dem grafische Objekt"""
cv['cursor'] = cv.temp_cursor
def event_bindings(object):
"""Binde Mausereignisse an das Grafik-Objekt"""
# Event für linke Maustaste
cv.tag_bind(object,"<Button-1>", lambda e,obj=object:mouse_button1(e,obj))
# Event für loslassen der linken Maustaste
cv.tag_bind(object,"<ButtonRelease 1>", lambda e,obj=object:mouse_release1())
# Event für Mausbewegung
cv.tag_bind(object,"<Motion>", lambda e,obj=object:mouse_move(e,obj))
# Maus bewegt sich ins Grafik-Objekt
cv.tag_bind(object,"<Enter>", lambda e:mouse_enter(e))
# Maus bewegt sich aus dem Grafik-Objekt
cv.tag_bind(object,"<Leave>", lambda e:mouse_leave(e))
class Zaehler(object):
Anzahl = 0
def __init__(self):
type(self).Anzahl += 1
def __del__(self):
type(self).Anzahl -= 1
def refreshRaute(self,zeilen,x,y,text=""): ##### diese Funktion zeichnet Raute und zugehöriges Textfenster####
self.raute = cv.create_polygon(0+x,50+y,100+x,0+y,
200+x,50+y,100+x,100+y,width=3,outline="black",
activeoutline="green",fill="white")
if zeilen==1: ###### Auf die Zeilenanzahl beziehen sich die Zeichen
zeichen=15
else:
zeichen=30
self.text = tk.Text(height=zeilen, width=zeichen,highlightcolor="white", font=("Arial", 16))
self.text.insert(tk.END,text)
self.text.tag_add("alles", "0.0", tk.END)
self.text.tag_config("alles", justify=tk.CENTER)
self.text.bind('<KeyRelease>', self.Keyrelease)
self.inhalt = cv.create_window(x+100,y+50,window=self.text)
self.identi = "tag" + str(Raute.Anzahl)
cv.addtag_withtag(self.identi,self.raute)
cv.addtag_withtag(self.identi,self.inhalt)
event_bindings(self.raute)
class Raute(Zaehler):
def __init__(self,x0,y0):
Zaehler.__init__(self)
self.x0 = x0
self.y0 = y0
self.refreshRaute(1,self.x0,self.y0)
def Keyrelease(self, event):
self.text.tag_add("alles", "0.0", tk.END)
self.text.tag_config("alles", justify=tk.CENTER)
self.unformatinhalt = str(self.text.get(0.0,tk.END))
self.formatinhalt = self.unformatinhalt[:-1]
self.leninhalt = len(self.formatinhalt)
if self.leninhalt<=9:
pass ##########!!! Hier soll die Funktion sein die die Zeilenanzahl auf 1 setzt !!!!#######
##########!!! und die Zeichenanzahl pro Zeile vergrößert !!!!!######
#self.refreshRaute(1,self.x0,self.y0,self.formatinhalt)
elif self.leninhalt>9:
pass ##########!!! Hier soll die Funktion sein die die Zeilenanzahl auf 2 setzt!!!!#######
##########!!! und die Zeichenanzahl pro Zeile verkleinert !!!!#######
print "!" + self.formatinhalt + "?"
print self.leninhalt
def __del__(self):
pass
#*** MODUL-TEST ***
if __name__ == '__main__':
root = tk.Tk()
root.title("Drag&Drop Canvas-Object-Move")
# Erzeugt Canvasfläche für die Aufnahme von Canvas-Objekten
cv = tk.Canvas(root,height=1000,width=1200,bd=0,relief='raised',bg='white')
cv.pack()
# Folgende Variablen werden dem cv.objekt angehängt
cv.drag_drop_flag = False
cv.mouse_x = None
cv.mouse_y = None
raute = Raute(1000, 100)
raute2 = Raute(200, 200)
raute3 = Raute(1000, 100)
print cv.find_closest(0,0)
root.mainloop()
Bitte helft mir bei 1- und 2-
Liebe Grüße, David =)