Fibonacci-Sequenz darstellen

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Xfd7887a
User
Beiträge: 135
Registriert: Montag 23. Juni 2014, 17:11

Mein bisheriger Stand: https://github.com/toxinman/zeug/blob/master/t.py. Wie schaffe ich es nun, dass der Screen bei jedem Klicken auf "next" oder "previous" aktualisiert wird? Ist dieses ständige aktualisieren überhaupt eine gute Idee?
BlackJack

@Xfd7887a: Du müsstest Dir die `Label`-Exemplare irgendwo merken, zum Beispiel in einer Liste und dann jeweils die Differenz zwischen der Anzahl der `Label` und der Anzahl der darzustellenden Hasen an neuen `Label`-Exemplaren zusätzlich erstellen oder zerstören.
Xfd7887a
User
Beiträge: 135
Registriert: Montag 23. Juni 2014, 17:11

Habe es aktualisiert: https://github.com/toxinman/zeug/blob/master/t.py. Aber in der Liste befinden sich nur "None"s
Sirius3
User
Beiträge: 17754
Registriert: Sonntag 21. Oktober 2012, 17:20

@Xfd7887a: da sind Nones drinnen, weil Du den Rückgabewert von place in die Liste schreibst.
Xfd7887a
User
Beiträge: 135
Registriert: Montag 23. Juni 2014, 17:11

Habe das place jetzt entfernt. Muss ich jetzt noch eine eigene Methode zur Darstellung der Liste schreiben oder wie macht man das?
Sirius3
User
Beiträge: 17754
Registriert: Sonntag 21. Oktober 2012, 17:20

So macht man das:

Code: Alles auswählen

         for x in xrange(rabbits):
            label = tk.Label(self.root, image=self.img)
            label.place(x=randint(1, 400), y=randint(1, 400))
            self.hasen.append(label)
Xfd7887a
User
Beiträge: 135
Registriert: Montag 23. Juni 2014, 17:11

Super :D Da stand ich wohl auf dem Schlauch. Trotzdem kann ich mir nicht erklären, warum bei klicken auf "previous" kann Hase verschwindet. Das letze Listenelement wird doch mit "pop()" gelöscht, oder?
BlackJack

@Xfd7887a: Das Element wird aus der Liste entfernt. Das ist alles. Du hast vorher ja nicht mal irgendeines der `Label`-Objekte in einer Liste aufgehoben und trotzdem wurden die dargestellt. Warum sollte das jetzt auf magische Weise anders sein? Du musst die Wigdets mit der dafür vorgesehenen Methode zerstören.

Die -1 beim `pop()`-Aufruf ist übrigens nicht notwendig, ohne Argument bezieht sich das auch auf das letzte Listenelement.
Xfd7887a
User
Beiträge: 135
Registriert: Montag 23. Juni 2014, 17:11

@BlackJack Stimmt natürlich. Habe es jetzt mit der "destroy" Methode versucht. Klappt auch ganz gut, nur den ersten Hasen bekomme ich nicht weg :(

Edit: Außerdem fällt mir gerade auf, dass meine Folge 1 2 3 5 geht und nicht 1 1 2 3 5. Was habe ich da verändert?
Xfd7887a
User
Beiträge: 135
Registriert: Montag 23. Juni 2014, 17:11

Habe das ganze aktualisiert, nun geht auch der erste Hase weg. Nur die Folge verhält sich komisch. Wenn ich das Programm starte und mehrmals auf "next" drücke, ergibt sich 1 2 3 5. Lösche ich dann hingegen alle Hasen und drücke erneut "next" ergibt sich 1 1 2 3 5.
Sirius3
User
Beiträge: 17754
Registriert: Sonntag 21. Oktober 2012, 17:20

@Xfd7887a: das ist doch ganz klar. Du startest bei (a,b) = (1,1), beim zurückgehen gehst Du aber bis (0,1) zurück.
Xfd7887a
User
Beiträge: 135
Registriert: Montag 23. Juni 2014, 17:11

:oops: stimmt. Habe es geändert.
Xfd7887a
User
Beiträge: 135
Registriert: Montag 23. Juni 2014, 17:11

Habe das ganze aktualisiert. Wie schaffe ich es nun, dass alle Hasen im Frame bleiben?
BlackJack

@Xfd7887a: In dem Du keinen ausserhalb platzierst. ;-)
Xfd7887a
User
Beiträge: 135
Registriert: Montag 23. Juni 2014, 17:11

Aber theoretisch platziere ich doch keine Hasen außerhalb. Ein Hase ist 50 * 50 und wird innerhalb des 500*500 Frame bei 50 - 450 (wegen seiner Größe) platziert. Jetzt ist jedoch links und oben ein riesiger Rand ohne Hasen und unten und rechts gar keiner.
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Dann überlege dir doch als erstes mal, woher der große Rand links und rechts kommt. Bei der Gelegenheit könnte auch ganz nützlich sein darüber nachzudenken, wie Bilder positioniert werden. Wenn du ein Bild auf (0, 0) setzt, wo befinden sich dann die Ecken des Bildes?
Das Leben ist wie ein Tennisball.
Xfd7887a
User
Beiträge: 135
Registriert: Montag 23. Juni 2014, 17:11

Woher der Rand kommt, weiß ich nicht. Wenn das Bild auf (0,0) gesetzt wird, sollte doch 25 rechts, links, oben und unten von diesem Bild belegt werden, oder?
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Nein. Die Position bezieht sich auf die linke obere Ecke des Bildes.
Das Leben ist wie ein Tennisball.
Xfd7887a
User
Beiträge: 135
Registriert: Montag 23. Juni 2014, 17:11

Habe das ganze aktualisiert: https://github.com/toxinman/zeug/blob/master/t.py. Jedoch scheinen einige Hasen immer noch über den Rand zu gehen. Außerdem hat das Programmfenster beim Start eine bestimmte Größe, die beim Klicken auf einen Button verändert wird.
Antworten