verdammt, ich kapier es einfach nicht

Fragen zu Tkinter.
Benutzeravatar
HWK
User
Beiträge: 1295
Registriert: Mittwoch 7. Juni 2006, 20:44

Warum geht es nicht mit continue? Aber auch aktion wieder auf 0 setzen.
Die Diskussion mit input gab es jetzt bereits wiederholt. Also wohl besser raw_input und Vergleich mit '1'.
MfG
HWK
Benutzeravatar
wuf
User
Beiträge: 1529
Registriert: Sonntag 8. Juni 2003, 09:50

Hallo derkai

So wie ich den Logik-Modultest durchführen würde. Hier den Code-Snippet krass modifiziert: :lol:

Code: Alles auswählen

#   Scriptname : panzer_logic_01.py
#   Autor      : Kai the Commander
#   Erstellt   : 12.08.2008
#   Geaendert  : 12.08.2008

import sys
from funktionen import nachbardic

class Panzer (object) :

    def __init__ (self, name, gehen, laufen, position, ausrichtung) :

        self.name = name
        self.gehen = gehen
        self.laufen = laufen
        self.position = position
        self.ausrichtung = ausrichtung

    def eigene_bewegung(self, aktion) :

        if aktion == 1 :
            self.ausrichtung -= 1
            if self.ausrichtung < 0 : self.ausrichtung = 5

        elif aktion == 2 :
            self.ausrichtung += 1
            if self.ausrichtung > 5 : self.ausrichtung = 0

        elif aktion == 3 :
            zwischenspeicher = self.position
            self.position = nachbardic[self.position][self.ausrichtung]
            x = self.position[0]
            y = self.position[1]
            if x == 0 or y == 0 :
                print "ungueltig"
                self.position = zwischenspeicher

#--- MODUL-TEST --------------------------------------------------------------#
if __name__ == "__main__":

    #~~ Prolog
    print
    print "****** Modul-Test (panzer_logic.py) ******"
    print

    #---- Test-Funktionen ----#

    def test_ausgabe():
        """Ausgabe der Modul-Attribute"""
        print
        print "----------- Test-Ausgabe -------------------"
        print "Panzername  :", panzer.name
        print "Ausrichtung :", panzer.ausrichtung
        print "Position    :", panzer.position
        print "Gehen       :", panzer.gehen
        print "Laufen      :", panzer.laufen
        print "--------------------------------------------"
        print

    #---- Test ----#

    #~~ Ausgangswerte
    position = (1,1)
    ausrichtung = 1

    # Instanz Panzer
    panzer = Panzer(name="Rasputin", gehen="schnell", laufen='Vorwaerts Marsch',
        position=position, ausrichtung=ausrichtung)

    while True :
        aktion = input("Aktionen: 1,2,3 und 100 ? ")

        if aktion == 100:
            #~~ Abbruch oder Neubanfang
            abschlusswunsch = input("zufrieden ? : ")

            if abschlusswunsch:
                #~~ Ausgabe der Modul-Attribute
                test_ausgabe()
                print "Ende der Modultest's"
                print
                #~~ Beende Modultest
                sys.exit(0)
            else:
                print "Sie waren nicht zufrieden, bitte ziehen Sie erneut"
                #~~ Setze Panzer auf Anfangsposition
                panzer.positon = position
                panzer.ausrichtug = ausrichtung

        if 0 < aktion <= 3:
            # Modul-Test Bewegung
            panzer.eigene_bewegung(aktion)
            #~~ Ausgabe der Modul-Attribute
            test_ausgabe()
Gruss wuf :wink:
Take it easy Mates!
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

derkai hat geschrieben:ja, aber was kommt da sonst hin. Wie geht es sonst ?
mit break geht es nicht, mit continue geht es nicht.
ohne etwas geht es noch viel weniger.
Was muss man denn schreiben, damit der wieder nach oben sprint ?
Nichts. Die letzte Zeile ist überflüssig bzw. sie verhindert gerade, dass "der wieder nach oben springt", weil die Schleife damit verlassen wird. An der Stelle endet ja der Schleifenrumpf - schreibst du da nichts hin, dreht die Schleife ihre nächste Runde ...

Naja, und wenn du da unbedingt was stehen haben willst, dann nimm halt ein "pass" ...
derkai
User
Beiträge: 169
Registriert: Montag 12. Mai 2008, 11:43

so, ich schon wieder ...
ich plane gerade meinen nächsten Schritte und dabei bermekre ich sooo langsam, was ihr alle dameit meint strukturierter vorgehen zu müssen.

In irgend einem meiner Bücker hatte ich über ein Software Tool gelesen, dass einem bei der Planung (nicht programmierung) helfen kann.

Kennt Ihr so etwas ? .. ich finde es einfach nicht wieder

Kai
imac
20 Zoll
2,4 ghz
Benutzeravatar
mkesper
User
Beiträge: 919
Registriert: Montag 20. November 2006, 15:48
Wohnort: formerly known as mkallas
Kontaktdaten:

Papier und Bleistift?
Benutzeravatar
wuf
User
Beiträge: 1529
Registriert: Sonntag 8. Juni 2003, 09:50

Hallo mkallas

Du hast noch eine wichtiges Werkzeug vergessen. Den Radiergummi! :lol:

Gruss wuf :wink:
Zuletzt geändert von wuf am Freitag 15. August 2008, 10:01, insgesamt 1-mal geändert.
Take it easy Mates!
BlackJack

Das ist aber Hardware, es wurde nach Software gefragt. ;-)

Aber ich stimme zu; Papier und Bleistift sind Werkzeuge, die man nicht unterschätzen sollte.
yipyip
User
Beiträge: 418
Registriert: Samstag 12. Juli 2008, 01:18

ich plane gerade meinen nächsten Schritte und dabei bermekre ich sooo langsam, was ihr alle dameit meint strukturierter vorgehen zu müssen.
Endlich .... ! :wink:

Als Tool meintest Du vielleicht UML,
aber im Moment plaediere ich
auch fuer Papier, Bleistift und Hirn.

:wink:
yipyip
Benutzeravatar
wuf
User
Beiträge: 1529
Registriert: Sonntag 8. Juni 2003, 09:50

Hallo BlackJack

Ich habe eine Frage zu deine damals präsentierten Code-Snippet. Es betrifft folgende Zeilen:

Code: Alles auswählen

    def __init__(self, width, height, tile=DESERT):
        self.tiles = [[tile] * width for dummy in xrange(height)]
Was ist deine Absicht bei der Initialisierung des Tile-Arrays die gleiche Objekt-Referenz zu nehmen und nicht für jedes Tile eine neue? Wenn ich das Attribut 'name' eines Tile-Objektes ändere wirkt sich diese Änderung auf alle Tile-Objekte aus.

Gruss wuf :wink:
Take it easy Mates!
yipyip
User
Beiträge: 418
Registriert: Samstag 12. Juli 2008, 01:18

Das hatte ich auch schon mal gefragt, aber bei der Laenge dieses Threads kann man ja schnell den Ueberblick verlieren...

:wink:
yipyip
Benutzeravatar
wuf
User
Beiträge: 1529
Registriert: Sonntag 8. Juni 2003, 09:50

Hallo yipyip

Sorry habe ich schlicht übersehen. Du meinst die Tread-Struktur des Forums ist nicht ideal für vielseitige Beiträge. :lol:

Ich glaube jeder Seitenwechsel in diesemTread erhöht den Aufrufzähler automatisch.

@BlackJack habe den Tread mit deiner Bezugnahme zu meiner letzten Frage gefunden:
http://www.python-forum.de/topic-15264,135.html

Gruss wuf :wink:
Zuletzt geändert von wuf am Freitag 15. August 2008, 14:49, insgesamt 1-mal geändert.
Take it easy Mates!
yipyip
User
Beiträge: 418
Registriert: Samstag 12. Juli 2008, 01:18

Stimmt, der Counter hier steigt eher potenziell statt linear.

:wink:
yipyip
Benutzeravatar
wuf
User
Beiträge: 1529
Registriert: Sonntag 8. Juni 2003, 09:50

Hallo Forumfreunde

Habe anhand des Code-Snippet von 'BlackJack' und Anregungen von 'yipyip' betreffs Nachbarfeld-Ermittlung ein 'map_logic' Modul mit Testmöglichkeiten für Konsole-Ausgabe zusammengestellt. Vielleicht habt ihr hierzu Verbesserungs- oder Optimierungs-Vorschläge.

[Code ausgelagert]

Gruss wuf :wink:
Take it easy Mates!
derkai
User
Beiträge: 169
Registriert: Montag 12. Mai 2008, 11:43

ich wollte jetzt zumindest einmal probieren, ob meine Ideen in einer
eigenständigen GUI Umgebung umsetzbar sind. Und was soll ich sagen -
ich hänge wieder einmal fest.

Code: Alles auswählen

from Tkinter import *
from funktionen import *

#Hauptfenster erzeugen
spiel = Tk()
spiel.config(width=1024,height=768,bg="grey")
spiel.title("Kai s Battle Game")

#Fenster fuer Canvas
fenster1 = Frame (spiel,width=650,height=700)
fenster1.place(x=350, y=46)

#Canvas im Frame Fenster1
spflaeche = Canvas (fenster1,width=1074,height=768)
spflaeche.place(x=0,y=0)

#Scrollbar erstellen
xleiste = Scrollbar (spflaeche,orient=HORIZONTAL,width=324)
xleiste.place(x=2,y=685)

#Spielflache erstellen
erstelle_hexfeldobjekte (spielreihen, ungerade_spalten)

for x in hexdic.iterkeys() :
    spflaeche.create_polygon (hexdic[x][0],fill=hexdic[x][2],outline="black")


#Titel fuer Canvas
besch1 = Label (spiel,text ="Spielfaeche",fg="red",bg="grey")
besch1.place(x=350,y=20)


spiel.mainloop()
Ich bekomme es einfach nicht hin, dass die Scrollbar beweglich ist,

Dafür sollen zwei Command Anweisungen verantwortlich sein.

xscrollcommand=SCROLLBAR.set und
command=FENSTER.xview

Aber egal wo ich die Einbaue - es geht nicht.

Würdet Ihr mir mal helfen ? und sagen wo ich welchen Befehl ergänzen muss ???

Danke
Kai
imac
20 Zoll
2,4 ghz
derkai
User
Beiträge: 169
Registriert: Montag 12. Mai 2008, 11:43

so habe ich es beispielsweise probiert :

Code: Alles auswählen

from Tkinter import *
from funktionen import *

#Hauptfenster erzeugen
spiel = Tk()
spiel.config(width=1024,height=768,bg="grey")
spiel.title("Kai s Battle Game")

#Fenster fuer Canvas
fenster1 = Frame (spiel,width=650,height=700)
fenster1.place(x=350, y=46)

#Canvas im Frame Fenster1
spflaeche = Canvas (fenster1,width=1074,height=768)
spflaeche.place(x=0,y=0)

#Spielflache erstellen
erstelle_hexfeldobjekte (spielreihen, ungerade_spalten)

for x in hexdic.iterkeys() :
    
    spflaeche.create_polygon (hexdic[x][0],fill=hexdic[x][2],outline="black")

#Scrollbar erstellen
xleiste = Scrollbar (fenster1,orient=HORIZONTAL,width=324)
xleiste.config(command=spflaeche.xview)
xleiste.place(x=2,y=685)

spflaeche.config(xscrollcommand=xleiste.set)


#Titel fuer Canvas
besch1 = Label (spiel,text ="Spielfaeche",fg="red",bg="grey")
besch1.place(x=350,y=20)


spiel.mainloop()


GEHT ABER NICHT !!!
Zuletzt geändert von derkai am Samstag 16. August 2008, 23:08, insgesamt 1-mal geändert.
imac
20 Zoll
2,4 ghz
derkai
User
Beiträge: 169
Registriert: Montag 12. Mai 2008, 11:43

so geht es, aber warum ?

es fehlt doch der Befehle : scrollbarcommand=xxx.set

Code: Alles auswählen

from Tkinter import *
from funktionen import *

#Hauptfenster erzeugen
spiel = Tk()
spiel.config(width=1024,height=768,bg="grey")
spiel.title("Kai s Battle Game")

#Fenster fuer Canvas
fenster1 = Frame (spiel,width=650,height=700)
fenster1.place(x=350, y=46)

#Canvas im Frame Fenster1
spflaeche = Canvas (fenster1,width=1074,height=768)
spflaeche.place(x=0,y=0)

#Spielflache erstellen
erstelle_hexfeldobjekte (spielreihen, ungerade_spalten)

for x in hexdic.iterkeys() :
    
    spflaeche.create_polygon (hexdic[x][0],fill=hexdic[x][2],outline="black")

#Scrollbar erstellen
xleiste = Scrollbar (fenster1,orient=HORIZONTAL,width=324)
xleiste.config(command=spflaeche.xview)
xleiste.place(x=2,y=685)




#Titel fuer Canvas
besch1 = Label (spiel,text ="Spielfaeche",fg="red",bg="grey")
besch1.place(x=350,y=20)


spiel.mainloop()
imac
20 Zoll
2,4 ghz
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

Ganz andere Sache:
Du solltest dich unbedingt vom place-Geometriemanager verabschieden. Das ist bestenfalls etwas für die allerersten Anfänge (und selbst da eigentlich überflüssig). Nimm dir mal Zeit für pack() (das scheint mir in deinem Fall das Richtige zu sein) oder grid().

Wenn du das Fenster z.B. mit der Maus aufziehst oder verkleinerst, zerhaut es dir momentan noch das ganze Layout. Das muss aber nicht sein.

Und: Dringende Empfehlung Tkinter nicht mittels Sternchenimport einzubinden!
derkai
User
Beiträge: 169
Registriert: Montag 12. Mai 2008, 11:43

welches Modul importiere ich denn dann ?

from Tkinter import ... ?

Pack gucke ich mir gerne noch einmal an.
Aber auch mit place gibt es relative Möglichkeiten der Platzierung

Kai
imac
20 Zoll
2,4 ghz
BlackJack

Höchstens relativ zu anderen absoluten Koordinaten. Wenn Du eine GUI haben möchtest, die nicht nur bei auf Deinem Rechner, mit Deiner Bildschirmauflösung und Deinen Schriften und Schriftgrössen funktioniert, dann ist `place()` nicht brauchbar.

Zum Import: Entweder Du importierst alle Namen, die Du verwendest explizit, oder Du importierst halt nur das Modul und greifst über das Modulobjekt auf den Inhalt zu. Hat den Vorteil, dass man auch im Quelltext sieht, wo etwas her kommt. Da der Name `Tkinter` etwas lang ist, binden die meisten Leute das Modul beim Importieren an einen kürzeren Namen: ``import Tkinter as tk``.
derkai
User
Beiträge: 169
Registriert: Montag 12. Mai 2008, 11:43

alles klar, ich werde es umschreiben

Kai
imac
20 Zoll
2,4 ghz
Antworten