Punkt mit Canvas

Fragen zu Tkinter.
Antworten
cime
User
Beiträge: 152
Registriert: Dienstag 24. Mai 2005, 15:49

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
mawe
Python-Forum Veteran
Beiträge: 1209
Registriert: Montag 29. September 2003, 17:18
Wohnort: Purkersdorf (bei Wien [Austria])

Hi!

Wie wärs mit

Code: Alles auswählen

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

mawe hat geschrieben:

Code: Alles auswählen

canvas.create_text(x,y,text=".")
ROTFL, YMMD
joe
leobm
User
Beiträge: 24
Registriert: Montag 4. November 2002, 10:14
Wohnort: Hamburg

create_line

Gruß, Felix
cime
User
Beiträge: 152
Registriert: Dienstag 24. Mai 2005, 15:49

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 ...
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
cime
User
Beiträge: 152
Registriert: Dienstag 24. Mai 2005, 15:49

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
Antworten