12 svar
69 visningar
Qetsiyah 4555
Postad: 17 sep 2020 Redigerad: 17 sep 2020

Skapa sierpenskitriangel med en kodmall, problem

Hej, se:

Vad ska jag göra? Jag fattar ingenting. Jag har gjort en fil i samma mapp som heter img.png, ska programmet rita på en befintlig bild? Skapar den en bild själv? 

Programmet är skrivet i Python och skapar en bild själv. Det ritar upp en fraktalbild i ett fönster. Vill du se hur det ser ut så behöver du skriva/kopiera programmet, spara det med filändelsen py, exempelvis sierpinski.py, och starta det med hjälp av en Python-tolk.

Qetsiyah 4555
Postad: 17 sep 2020 Redigerad: 17 sep 2020

Jaha! Jag hade bara inte tillräckligt med tålamod, sen ritar bilden och visar den när den är klar (ungefär fem sekunder), jag trodde att man skulle få se medan den ritade. 

Tack!

EDIT: men var sparas denna bild?

Den sparas inte utan finns enbart på skärmen (i grafikminnet). Vill du spara bilden behöver du koda lite till...

Qetsiyah 4555
Postad: 17 sep 2020

åh... okej! Det är inte tid att lära sig nu, nu ska jag bekanta mig vidare med att skapa visuals

Lindehaven skrev:

Den sparas inte utan finns enbart på skärmen (i grafikminnet). Vill du spara bilden behöver du koda lite till...

Enklast är ju att spara en skärmdump

Qetsiyah 4555
Postad: 17 sep 2020

Hej igen, jag håller på att leka med denna kod och har ändrat parametrarna för att förstå vad som förssiggår men jag lyckas inte. Kan du bekräfta att jag tror rätt här?:

Jag förstår vad canvasen gör, det är bakgrunden och den ytan som vi har att röra oss inom. Är Canvas (med stort C) en funktion som kommer från tkinter-biblioteket som gör en canvas? Vad för sorts objekt är canvas med lilla c?

Img är en bild som är tom egentligen, det är sierpinski som gör img till vad den är. Img måste inte fylla hela canvasen, det går att ändra på rad 28. 

.create_image() infogar img på canvasen. Jag förstår inte vad koordinaterna i .create_image() anger för nåt, först trodde jag att det var imgs mittpunkt, men icke. 

sierpinski() tar in img som input och ritar på den. Men varför kan man inte definiera sierpinski utan något argument? Då kan vi ju  stoppa in olika img. 

Laguna 10971
Postad: 17 sep 2020

Det här verkar vara en bra sida: https://anzeljg.github.io/rin2/book2/2405/docs/tkinter/create_image.html 

Canvas är en klass, och det som ser ut som ett funktionsanrop av Canvas är det också. Det skapar en instans av klassen Canvas och returnerar den.

Qetsiyah skrev:

Jag förstår vad canvasen gör, det är bakgrunden och den ytan som vi har att röra oss inom. Är Canvas (med stort C) en funktion som kommer från tkinter-biblioteket som gör en canvas? Vad för sorts objekt är canvas med lilla c?

canvas blir ett objekt av klassen Canvas när det skapas med konstruktorn Canvas(). Typisk objektorienterad programmering.

Img är en bild som är tom egentligen, det är sierpinski som gör img till vad den är. Img måste inte fylla hela canvasen, det går att ändra på rad 28. 

Ja.

.create_image() infogar img på canvasen. Jag förstår inte vad koordinaterna i .create_image() anger för nåt, först trodde jag att det var imgs mittpunkt, men icke. 

"The image is positioned relative to point (x, y)". Så img positioneras mitt på canvas.

sierpinski() tar in img som input och ritar på den. Men varför kan man inte definiera sierpinski utan något argument? Då kan vi ju  stoppa in olika img. 

Då funktionen sierpinski har ett argument img så kan man göra just det du frågar efter, d v s stoppa in olika img. Det är något som är bra eftersom funktionen sierpinski då kan arbeta med olika värden på argumentet.

Notera att variabeln img som skapas i funktionen main är en lokal variabel i main. Argumentet img till funktionen sierpinski är en lokal variabel i funktionen sierpinski. Även om variablerna har samma namn så finns de på olika plats i minnet och kan ha olika värden.

När funktionen sierpinski anropas från funktionen main så sker det med värdet på variabeln img som skapats i funktionen main. När funktionen sierpinski börjar exekvera så har det värdet kopierats till argumentet img. 

Laguna 10971
Postad: 17 sep 2020

Med andra ord, du kan ändra namn på img i definitionen av 'sierpinski' till t. ex. img2 utan att beteendet ändras. 

Qetsiyah 4555
Postad: 20 sep 2020 Redigerad: 20 sep 2020

Jag vill skapa flera rektanglar i ett led, jag har gjort såhär:

Men jag vet vad problemet är, den ritar bara om samma rektangel fyra gånger, och till slut får jag bara en rektangel på positionen (canvasbredd, 3*100). i är ju en siffra och kan inte ingå i namnet. Jag improviserade att ersätta med img+str(i) men det gick såklart inte.

Laguna 10971
Postad: 20 sep 2020

Var vill du placera dem? Och var kommer namnet in i bilden?

Qetsiyah 4555
Postad: 20 sep 2020 Redigerad: 20 sep 2020

De ska ha 100 mellanrum, därav i*100 på rad 24. Min kod skapar bara en rektangel.

Jag vill har fyra olika img, de kan heta img0, img1, img2, img3, tänkte jag. Just nu har jag bara en img som heter img.

edit: problemet löst!

Svara Avbryt
Close