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

Code: Alles auswählen

canvas.create_text(x,y,text=".")
Gruß, mawe

Verfasst: Dienstag 25. Oktober 2005, 19:54
von joe
mawe hat geschrieben:

Code: Alles auswählen

canvas.create_text(x,y,text=".")
ROTFL, YMMD
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*)

:shock: :shock: :shock: :shock:

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