Seite 1 von 1

Farbe von Buntstift ändern

Verfasst: Mittwoch 28. Februar 2007, 19:01
von times89
Huhu @ all !!!

Also ich habe ein kleine Problem wir haben im Rahmen unseres Informatikunterrichts einen kleinen Code bzw. Script erstellt nun komm ich aber nicht weiter ich möchte das sich bei meinem Zeichenstift (Z.87)die Farbe in rot verändert aber mit dem was nun in der Zeile 87 ist funktioniert es nicht immer nur die Standartfarbe weiß und wenn dann taucht eine Fehlermeldung auf ich weiß echt nicht mehr weiter wäre nett wenn mir jemand helfen könnte ... vielen Dank im vorraus

Lg Tim

Code: Alles auswählen

from sum import Stift,Bildschirm,Maus,Buntstift
meinBildschirm=Bildschirm()
meinStift=Stift()
meinMaus=Maus()
meinBuntstift=Buntstift()

### Ringe der Dartscheibe ###
meinStift.bewegeBis(420,340)
meinStift.runter()
meinStift.zeichneKreis(15)
meinStift.zeichneKreis(30)
meinStift.zeichneKreis(60)
meinStift.zeichneKreis(75)
meinStift.zeichneKreis(105)
meinStift.zeichneKreis(121)
meinStift.hoch()

### Verstrebungen der Dartscheibe ###
#Verstrebung 1 (12 Uhr)
meinStift.bewegeBis(420,310)
meinStift.runter()
meinStift.bewegeBis(420,220)
meinStift.hoch()
#Verstrebung 3 (3 Uhr)
meinStift.bewegeBis(450,340)
meinStift.runter()
meinStift.bewegeBis(540,340)
meinStift.hoch()
#Verstrebung 2 (6 Uhr)
meinStift.bewegeBis(420,370)
meinStift.runter()
meinStift.bewegeBis(420,460)
meinStift.hoch()
#Verstrebung 4 (9 Uhr)
meinStift.bewegeBis(390,340)
meinStift.runter()
meinStift.bewegeBis(300,340)
meinStift.hoch()

### Pfeil 1 ###
#Mittelstueck
meinStift.bewegeBis(0,0)
meinStift.runter()
meinStift.bewegeBis(40,0)
meinStift.zeichneKreis(1)
meinStift.hoch()


while not meinMaus.istGedrueckt():
	meinStift.radiere()
	meinStift.runter()
	meinStift.zeichneKreis(1)
	meinStift.dreheUm(180)
	meinStift.bewegeUm(40)
	meinStift.dreheUm(90)
	meinStift.hoch()
	if meinStift.vPosition()<meinBildschirm.hoehe():
		meinStift.bewegeUm(3.0)
	else:
		meinStift.bewegeBis(0,0)
	meinStift.dreheUm(90)
	meinStift.normal()
	meinStift.runter()
	meinStift.bewegeUm(40)
	meinStift.zeichneKreis(1)
	meinStift.hoch()


while meinStift.hPosition()<420:
	meinStift.radiere()
	meinStift.runter()
	meinStift.zeichneKreis(1)
	meinStift.dreheUm(180)
	meinStift.bewegeUm(40)
	meinStift.hoch()
	meinStift.dreheUm(180)
	meinStift.normal()
	meinStift.bewegeUm(0.1)
	meinStift.runter()
	meinStift.bewegeUm(40)
	meinStift.zeichneKreis(1)
	meinStift.hoch()
	
if meinStift.vPosition()>325 and meinStift.vPosition()<355:
	
	meinBuntstift.bewegeBis(100,100)
	meinBuntstift.setzeFarbe("rot")
	meinBuntstift.schreibeText("WiNNeR!!!")
	meinBuntstift.hoch()
	
else:

	meinBuntstift.bewegeBis(100,100)
	meinBuntstift.schreibeText("LoSeR!!!")
	meinBuntstift.hoch()

### Verstrebungen der Dartscheibe - Optische Verbesserung ###
#Verstrebung 1 (12 Uhr)
meinStift.bewegeBis(420,310)
meinStift.runter()
meinStift.bewegeBis(420,220)
meinStift.hoch()
#Verstrebung 3 (3 Uhr)
meinStift.bewegeBis(450,340)
meinStift.runter()
meinStift.bewegeBis(540,340)
meinStift.hoch()

meinStift.bewegeBis(420,370)
meinStift.runter()
meinStift.bewegeBis(420,460)
meinStift.hoch()
#Verstrebung 4 (9 Uhr)
meinStift.bewegeBis(390,340)
meinStift.runter()
meinStift.bewegeBis(300,340)
meinStift.hoch()

meinStift.bewegeBis(420,340)
meinStift.runter()
meinStift.zeichneKreis(15)
meinStift.zeichneKreis(30)
meinStift.zeichneKreis(60)
meinStift.zeichneKreis(75)
meinStift.zeichneKreis(105)
meinStift.zeichneKreis(121)
meinStift.hoch()

while not meinMaus.istGedrueckt():
	pass

meinStift.gibFrei()
meinBildschirm.gibFrei()
meinMaus.gibFrei()



Verfasst: Mittwoch 28. Februar 2007, 19:36
von Bernhard
Hi!

Mit dem, was in Zeile 87 passiert, rufst Du eine Methode des Objekts "meinBuntstift" auf. Dieses ist eine Instanz der Klasse Buntstift (seit Zeile 5). Was also in der Methode genau passiert, steht in der Beschreibung der Klasse Buntstift. Diese Beschreibung hast Du hier aber nicht gepostet, denn Du importierst sie in Zeile eins.

Zwei Wege: Versuch mal statt "rot" "red" zu übergeben, und wenn das nicht klappt, poste die Klassendefinition von "Buntstift"

Gruß,
Bernhard

Verfasst: Mittwoch 28. Februar 2007, 20:19
von times89
Huhuz das hab ich ganz vergessen, weil wir mit diesen nicht wirklich Arbeiten sie sind uns schon vorgeben hast aber recht :oops:

Code: Alles auswählen

"""
 <Von Stiften und Mäusen>
 Eine neue Portierung für Python, entstanden im Rahmen meiner Diplomarbeit.

 Klasse Stift von SuM

 erste Vers: 14.01.2002
 Version...: 11.03.2003
 Status....: OK, keine Füllmuter implementiert.
 Autor.....: i.linkweiler@gmx.de
"""

from stift import *
import math

# Konstanten
weiss=(255,255,255)
schwarz=(0,0,0)
rot=(255,0,0)
gruen=(0,255,0)
blau=(0,0,255)
gelb=(255,255,0)
grau=(100,100,100)

WEISS=(255,255,255)
SCHWARZ=(0,0,0)
ROT=(255,0,0)
GRUEN=(0,255,0)
BLAU=(0,0,255)
GELB=(255,255,0)
GRAU=(100,100,100)

FETT=1
KURSIV=2
NORMAL=0
STANDARDSTIL=0
STANDARDSCHRIFT="default.ttf"

DURCHSICHTIG=0
GEFUELLT=1

class Buntstift(Stift):
    """
    Der Buntstift ist ein Zeichenwerkzeug, dass sich auf dem Bildschirm bewegen kann.
    Er hat eine Position (Ursprung ist links oben) und eine Richtung (0'=rechts, Drehsinn math. positiv.)
    Der Stift kennt zwei Zustände: gesenkt (dann wird geschrieben) und gehoben (dann wird
    der Stift bewegt, ohne zu schreiben).
    Zum Zeichnen kennt er zwei Modi: 'normal' zum Schreiben, und 'radieren' zum Loeschen bzw. Ausradieren.
    Er hat eine Farbe (Konstanten: schwarz, weiss, rot, gruen, blau, gelb);
    sowie einen Schriftstil.
    """

    def setzeStandard(self):
        """
        Der Stift wird zurückgesetzt. Der Stift befindet sich angehoben auf Position (0,0).
        """

        self.NORMALMODUS = 0
        self.RADIERMODUS=1
        self.WECHSELMODUS=2
        # Stiftposition
        self.zstiftx=0
        self.zstifty=0
        # Stiftzustand
        self.zhoch=1         # true
        # Stiftrichtung
        self.zwinkel=0
        # Normalmodus
        self.zschreibmodus = self.NORMALMODUS
        # self.normal() # Normalmodus 	
        self.farbe=weiss
        self.Linienbreite=1
        self.FuellMuster=0
        self.SchriftArt="" #"arial.ttf"
        self.SchriftStil=0
        self.SchriftGroesse=14

    def setzeFarbe(self,neue_farbe):
        """
        Setze Farbe auf den angebenen Farbwert.
        neue_farbe = (Konstanten: schwarz, weiss, rot, gruen, blau, gelb) oder ein
        Tupel der Form (r,g,b) mit Werten aus (0..255)
        """
        
        self.farbe=neue_farbe
        
    def setzeLinienbreite(self,breite):
        "Setzte die Linienbreite auf den Wert breite:int (1..15)"
        self.Linienbreite=breite

    def setzeFuellMuster(self,muster):
        "setze Füllung 0=aus, 1=an"
        self.FuellMuster=muster

    def setzeSchriftArt(self,art):
        "Lade Schriftart. art:string mit Werten: 'arial' oder 'cour'"
        self.SchriftArt=art

    def setzeSchriftStil(self,stil):
        "Setzte Schriftstil. stil:int mit 0=normal, 1=fett, 2=kursiv, 4=unterstrichen"
        self.SchriftStil=stil

    def setzeSchriftGroesse(self,groesse):
        "Setzte Schriftgroesse. groesse: int (10 oder jede andere positive Zahl)"
        self.SchriftGroesse=groesse

    def setzeModus(self,modus):
        pass
        
    def textBreite(self,text):
        "Liefert die breite einer Textausgabe"
        return len(text)*self.SchriftGroesse

    def zahlBreite(self,text):
        "Liefert die breite einer Textausgabe"
        return len(str(text))*self.SchriftGroesse

    def zeichneLinie(self, x1, y1, x2, y2):
        if self.zschreibmodus==self.NORMALMODUS:
      	  self.bildschirm.drawline((x1, y1), (x2, y2),self.farbe,self.Linienbreite)
        else:
      	  self.bildschirm.drawline((x1, y1), (x2, y2),(0,0,0),self.Linienbreite)
		
    def schreibe(self, ps):
        ps=str(ps)
        
        if self.zschreibmodus==self.NORMALMODUS: farbe=self.farbe
        else: farbe=schwarz
        
      	self.bildschirm.fonttext(ps,(self.zstiftx,self.zstifty),farbe,self.SchriftArt,self.SchriftGroesse,self.SchriftStil)
      	self.zstiftx=self.zstiftx + self.FontMetrics*len(ps)     	

    def zeichneKreis (self, pradius):
        """
        Zeichnet an der aktuellen Position einen Kreis mit dem Radius pradius.
        """      
        if self.zschreibmodus==self.NORMALMODUS:
          self.bildschirm.kreis((self.zstiftx,self.zstifty),pradius,self.farbe,self.FuellMuster)
        else:
          self.bildschirm.kreis((self.zstiftx,self.zstifty),pradius,(0,0,0),self.FuellMuster)
        


#######################################################################################
# Programmstück, um die Klasse Stift zu testen
#######################################################################################

if __name__ == '__main__':
  from bildschirm import *

  bildschirm=Bildschirm()
  test = Buntstift() 
  test.setzeFarbe(rot)
  
  print "Winkel:  ", test.zwinkel, "\vjetzt wird gedreht, um 45': "
  test.dreheUm(45)
  print "Winkel: ", test.zwinkel
  print "Stift - ",
  print "\vPosition: horizontal ", test.zstiftx, " vertikal ", test.zstifty
  print "         Zustand: ", 
  if test.zschreibmodus== test.NORMALMODUS: 
  	print "NORMALMODUS"
  elif test.zschreibmodus == test.RADIERMODUS:
        print "RADIERMODUS"
  elif test.zschreibmodus == test.WECHSELMODUS:
        print "WECHSELMODUS"
  
  print "         Pen: ",	
  if test.zhoch: print "    oben" 
  else: print "    unten"	
		
  test.runter()
  
  print "         Pen: ",	
  if test.zhoch: print "    oben" 
  else: print "    unten"	
  
  test.bewegeBis(320, 240)
  test.zeichneRechteck(150,150)
  
  test.setzeLinienbreite(5)
  test.setzeFarbe(gelb)
  test.bewegeBis(20, 40)
  test.zeichneRechteck(170,400)
  
  test.bewegeBis(420, 140)
  
  test.zeichneKreis(10)
  test.bewegeUm(-100)
  
  test.setzeFarbe(gruen)
  test.setzeSchriftGroesse(30)
  test.setzeSchriftStil(2)
  test.schreibe("Das musste mal geschrieben werden")

  test.zeichneKreis(80)
  
  test.radiere()
  test.wechsle()
 
  test.gibFrei()
  bildschirm.gibFrei()
  print "Ende!"
  

Verfasst: Mittwoch 28. Februar 2007, 20:32
von Bernhard
Ok, das hilft schon mal weiter, selbst ohne die Fehlermeldung: In dem importierten Modul sind die Farben als Variablen mit den Namen rot, weiss, usw definiert. Du übergibst der Objektmethode aber nicht eine solche Variable sondern einen String in dem der Name der Variable steht. Das ist ein bisschen viel verlangt. Du musst entweder ein Tupel mit den RGB-Werten übergeben, oder Dir überlegen, wie Du die Variablen aus dem Modul ansprechen kannst und die dann übergeben. Einen String zu übergeben hilft sicher nicht.

Schönen Gruß,
Bernhard