Seite 1 von 1
Punkt mit Canvas
Verfasst: Dienstag 25. Oktober 2005, 13:00
von cime
hallöche,
gibt es eigentlich noch eine sinvollere Möglichkeit in einem Canvas Widget einen Punkt zu setzen als durch ein verkleinertes viereck???
thx
mfg cime
Verfasst: Dienstag 25. Oktober 2005, 19:21
von mawe
Hi!
Wie wärs mit
Gruß, mawe
Verfasst: Dienstag 25. Oktober 2005, 19:54
von joe
Verfasst: Dienstag 25. Oktober 2005, 21:49
von leobm
create_line
Gruß, Felix
Verfasst: Mittwoch 26. Oktober 2005, 07:23
von cime
thx .... (Kreativität ist alles *g*)
hier auch ma gleich meine anwendung, ich hab da nämlich so n kleines prob:
eigentlich soll die Anwendung die Eingabewerte (nur int) grafisch darstellen mein prob ist aber, dass die neuen Werte nicht anzeigt, da er ja nicht wieder zur mainloop zurückkommt ... ich dachte mti root.update (markierte Zeile) könnte man die Bildschirmanzeige akutalisieren, aber es klappt nicht, könnte mir jemand sagen wieso???
hier der quellcode:
Code: Alles auswählen
#show.py
#editor: cime
import math
from Tkinter import *
from Canvas import *
def Punkt(master,x,y):
Rectangle(master,(2*x,2*y),(2*x+1,2*y+1))
def show_graph2(master,source,start,end,neg_x=True,neg_y=True):
can=Canvas(master,bg='white')
can.pack()
if neg_y:
middle_y=int(can.config()['height'][-1])/4
else:
middle_y=0
if neg_x:
middle_x=int(can.config()['width'][-1])/4
else:
middle_x=0
#Koordinatensystem zeichnen
Rectangle(can,(0,2*middle_y),(4*middle_x,2*middle_y+1))
Rectangle(can,(2*middle_x,0),(2*middle_x+1,4*middle_y))
#Punkte mit Verbindungen setzen
y_before=0
for x in xrange(start,end):
y=source.read()
if y is None:
return
Punkt(can,middle_x+x,middle_y-y)
diff=y_before-y
if abs(diff)>1:
for i in xrange(y_before,y,-abs(diff)/diff):
Punkt(can,middle_x+x-1,middle_y-i)
master.update()###########markierte Zeile ############
yield True
class reader:
def __init__(self):
print 'gestartet'
self.value=None
def put(self,value):
self.value=value
def read(self):
return self.value
def begin(root):
x.destroy()
s=reader()
get_back=True
while get_back:
s.put(input('naechster Wert: '))
get_back=show_graph2(root,s,-100,100)
if __name__=='__main__':
root=Tk()
x=Button(root,text='Anfangen',command=lambda x=root: begin(x))
x.pack()
root.mainloop()
PS: dieser kleine Umweg über die Reader-KLasee ist notwendig, da von einer solchen KLasse später mal die Werte ausgelesen werden sollen ...
Verfasst: Mittwoch 26. Oktober 2005, 09:41
von Gast
Habe ich jetzt nicht getestet:
Aber macht mal ein can.update()
oder das can.pack()
erst nachdem du Deine Zeichnung gemacht hast.
Gruß, Felix
Verfasst: Mittwoch 26. Oktober 2005, 12:09
von cime
Anonymous hat geschrieben:Habe ich jetzt nicht getestet:
Aber macht mal ein can.update()
oder das can.pack()
erst nachdem du Deine Zeichnung gemacht hast.
Gruß, Felix
ich möchte aber, dassnach jeder Eingabe auch der Punkt sofort gezeichnet wird ... aber trotzdem danke