0,0 Pixel im Canvas

Fragen zu Tkinter.
Antworten
antimicro
User
Beiträge: 151
Registriert: Sonntag 29. Februar 2004, 16:24

Montag 18. Oktober 2004, 20:00

Hi,
kenn jemand das Problem das der erste Pixel immer oben links ist (wo er ja auch hingehört). Wenn ich jetzt mal den "NullPunkt" unten links brauche, wie geh ich da vor?

Mit einem Offset arbeiten oder gibts da auch elegantere Lösungen?

Hört sich etwas seltsam an aber vielleicht kenn ja einer das Problem.

Dank im Voraus!
greetings
sebi
mawe
Python-Forum Veteran
Beiträge: 1209
Registriert: Montag 29. September 2003, 17:18
Wohnort: Purkersdorf (bei Wien [Austria])

Montag 18. Oktober 2004, 20:41

Hi!

Naja, bei deinem "0-Punkt" ist dann eben x=0 und y=Höhe des Canvas.
Du musst dann immer die tatsächlichen y-Werte von der Höhe abziehen. Um's einfacher zu machen, kann man die Umwandlung ja in eine Funktion packen. Tolle Erklärung :?. Beispiel:

Code: Alles auswählen

from Tkinter import *

x1,x2 = 100,100

def y(i):
	return x2 - i   # vielleicht noch minus ein Offset, soll ja nicht in der Ecke kleben :-)

root = Tk()
c = Canvas(width=x1,height=x2)
c.pack()
c.create_line(
	0,y(0),       # "0-Punkt"
	10,y(10),
	arrow=FIRST)
mainloop()
Etwas wirklich eleganteres fällt mir auch nicht ein.

Gruß, mawe
Dookie
Python-Forum Veteran
Beiträge: 2010
Registriert: Freitag 11. Oktober 2002, 18:00
Wohnort: Salzburg
Kontaktdaten:

Montag 18. Oktober 2004, 20:52

Hi antimicro,

das Problem kennt jeder, der sich etwas mit Computergrafik beschäftigt.
Gelöst wird das Problem meist durch eine Verschiebung der Koordinaten nach links unten und einer Skalierung der y-Werte mit -1. Das ganze lässt sich vereinfachen, indem man einfach die y Koordinate von der Höhe des Ausgabefensters abzieht.

Code: Alles auswählen

def ktrans(canvas, x, y):
        return x, canvas["height"] - y

Gruß

Dookie
[code]#!/usr/bin/env python
import this[/code]
antimicro
User
Beiträge: 151
Registriert: Sonntag 29. Februar 2004, 16:24

Montag 18. Oktober 2004, 20:56

ah...
NullPunkt verschieben ist klar und damit der darüberliegende Pixel nicht -1 vom Offset ist einfach mal -1. Hmm... das sollte dann auch so klappen.

besten Dank
greetings
sebi
mawe
Python-Forum Veteran
Beiträge: 1209
Registriert: Montag 29. September 2003, 17:18
Wohnort: Purkersdorf (bei Wien [Austria])

Montag 18. Oktober 2004, 20:58

Hi!

@Dookie:
Klingt wie das was ich gesagt habe :wink:

BTW: Sehe ich schlecht oder kann man die oberste und die unterste Pixelreihe nicht erreichen?

Gruß, mawe
antimicro
User
Beiträge: 151
Registriert: Sonntag 29. Februar 2004, 16:24

Montag 18. Oktober 2004, 21:51

cool... jetzt wo du's sagst.

Ich hab oben und links zwei Pixel zu wenig und unten und rechts zwei Pixel zu viel. => mit WindowsXP und Python 2.3.4
greetings
sebi
Dookie
Python-Forum Veteran
Beiträge: 2010
Registriert: Freitag 11. Oktober 2002, 18:00
Wohnort: Salzburg
Kontaktdaten:

Dienstag 19. Oktober 2004, 00:55

Hi nochmal,

kleine Berichtigung:

Code: Alles auswählen

def ktrans(canvas, x, y):
        return x, (canvas["height"] - 1) - y
Bei einer Höhe von z.B. 480 ist der grösste y-Wert 479 und davon muss y abgezogen werden. Der kleinst y-Wert is ja 0 und von 0 - 479 sinds dann die 480 Zeilen.


Gruß

Dookie
@mawe: ich hab etwas zu lange gebraucht für mein Posting, weil die Nudeln fürs Abendessen dazwischen abgeseiht werden wollten :)
[code]#!/usr/bin/env python
import this[/code]
Antworten