Seite 1 von 1

Fehldarstellung von Linien auf Canvas

Verfasst: Samstag 9. August 2008, 22:40
von numerix
Ich benötige für eine graphische Darstellung eine Art Kanalsystem. Das Zeichnen von Kanälen habe ich mittels der create_line()-Methode realisiert - klappt alles wunderbar.

Nun habe ich das Programm - sowohl als py-Skript als auch als exe-File (mittels pyinstaller erstellt) auf verschiedenen Systemen getestet und auf einem Win98-Rechner Unerfreuliches erlebt. Weil Bilder mehr als Worte sagen:

Bild

Oben (grün) das, was herauskommen sollte. Funktioniert auch unter Linux, Win XP, Win NT. Unten (rot) das, was ich auf dem Win98-Rechner zu sehen bekomme (die Farbe habe ich jetzt extra geändert - die ist natürlich gleich geblieben). An der Python-Version kann es nicht liegen - die ist ja bei der exe-Fassung mit eingebunden.

Das Problem scheint zu sein, dass auf diesem Rechner die Option capstyle (joinstyle ebenfalls) der create_line()-Methode nicht ausgewertet werden - es wird immer mit dem Wert "round" gearbeitet, egal wie ich diese Werte belege. Zwar liefert mir ein canvas.itemcget("capstyle") den Wert "butt" zurück (das ist der default-Wert, der die - von mir gewünschten - abgeschnittenen Enden produziert), aber gezeichnet werden die abgerundeten (auch wenn ich capstyle manuell auf "butt" setze).

Was ich nun gerne wüsste: Liegt es am Betriebssystem als solchem oder an der konkreten Konfiguration gerade dieses Rechners? Und: Wie sieht das auf anderen Rechnern aus.

Wäre nett, wenn der ein oder andere das folgende Skript mal ausführen und Rückmeldung geben könnte (herauskommen sollte die obere, grüne Fassung, mit abgeschnittenen Enden, so dass eine offene Kanalverbindung entsteht).

Code: Alles auswählen

import Tkinter as tk

root = tk.Tk()
canv = tk.Canvas(root,width=300,height=120,bg="white")
canv.pack()
canv.create_line(20,20,280,20,width=16,fill="#333")
canv.create_line(20,20,280,20,width=12,fill="#0f0")
canv.create_line(150,26,150,100,width=16,fill="#333")
canv.create_line(150,26,150,100,width=12,fill="#0f0")
root.mainloop()

Verfasst: Sonntag 10. August 2008, 01:14
von yipyip
Bei mir erscheint's so, wie es sein soll:
butt als default,
round bei capstyle='round'

Ubuntu Hardy, Python 2.5.2

:wink:
yipyip

Verfasst: Sonntag 10. August 2008, 12:31
von HWK
Bei mir ist die Ausgabe auch korrekt.

Code: Alles auswählen

Das ist meine Umgebung:
=======================
sys.version: 2.4.4 (#71, Oct 18 2006, 08:34:43) [MSC v.1310 32 bit (Intel)]
sys.platform: win32
sys.winver: 2.4
MfG
HWK

Verfasst: Sonntag 17. August 2008, 16:26
von tommes
Hallo,

ausprobiert auf einem Rechner mit Betriebssystem Windows Millenium
auf folgender Python-Version ergibt denselben Fehler:

(analog Deiner "roten" Darstellung)

Python 2.4.2 (#67, Sep 28 2005, 12:41:11) [MSC v.1310 32 bit (Intel)] on win32
Type "copyright", "credits" or "license()" for more information.

Viele Grüße
Thomas

Verfasst: Sonntag 17. August 2008, 18:08
von numerix
Danke euch schonmal für eure Mühe!

Verfasst: Sonntag 17. August 2008, 21:39
von Redprince
Funktioniert wie erwartet unter Ubuntu Gutsy Gibbon und Python 2.5.1.