Fehler Code

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.
-Sugar Princes-
User
Beiträge: 38
Registriert: Freitag 8. April 2005, 16:33
Wohnort: Krefeld

hi leute,

ich habe einen fehler code bekommen - dann hab ich mit dem programm von leondis direkt mal die zahlen für die zeilen vergeben aber ich find irgendwie nicht heraus was der fehler code für ein problem hat

leondis meinte man müsste es debuggen

ich hab vom debuggen leider noch keine erfahrung für ratschläge bin ich gerne zu haben

na ja wer mal zeit hat kann es sich ja anschauen

Code: Alles auswählen

Traceback (most recent call last):
  File "C:\Dokumente und Einstellungen\Standard\Desktop\würfel\Rotierender Würfel Sicherungskopie.pyw", line 244, in ?
    x = CubeShow("xyzt")
  File "C:\Dokumente und Einstellungen\Standard\Desktop\würfel\Rotierender Würfel Sicherungskopie.pyw", line 242, in __init__
    frame_bottom.turnjob(2)     # "Auftrag beginnen"
  File "C:\Dokumente und Einstellungen\Standard\Desktop\würfel\Rotierender Würfel Sicherungskopie.pyw", line 148, in turnjob
    self.hcanvas.setjob(param)
  File "C:\Dokumente und Einstellungen\Standard\Desktop\würfel\Rotierender Würfel Sicherungskopie.pyw", line 177, in setjob
    self.dothejob(code)
  File "C:\Dokumente und Einstellungen\Standard\Desktop\würfel\Rotierender Würfel Sicherungskopie.pyw", line 196, in dothejob
    self.show()
  File "C:\Dokumente und Einstellungen\Standard\Desktop\würfel\Rotierender Würfel Sicherungskopie.pyw", line 211, in show
    int(0.5+self.center+x1),int(0.5+self.center-y1))
  File "E:\PROGRA~1\Python\lib\lib-tk\Tkinter.py", line 2039, in coords
    self.tk.splitlist(
TclError: invalid command name ".14915184"
Olliminatore
User
Beiträge: 55
Registriert: Montag 30. Mai 2005, 16:03
Wohnort: schönsten Stadt Deutschlands
Kontaktdaten:

Was ist den leondis?
TclError: invalid command name ".14915184"
Ist doch doch der Fehler, Befehlsnamen müssen glaube immer mit Buchstaben anfangen.
-Sugar Princes-
User
Beiträge: 38
Registriert: Freitag 8. April 2005, 16:33
Wohnort: Krefeld

hmmm :? ich habe keine ahnung .....

solche sachen liegen mir wie ein brett vorm kopf :(
Olliminatore
User
Beiträge: 55
Registriert: Montag 30. Mai 2005, 16:03
Wohnort: schönsten Stadt Deutschlands
Kontaktdaten:

Bin zwar auch nicht so taff in Python, aber ich glaube Python gibt bloss immer einen Fehler aus (mehr oder weniger lang) da es sofort anhält. Meisstens ist der Grund ganz unten :P

Du hast keine Ahnung was leondis ist? Oder meinst du "Leonidas"? :?
Sorry mit Tkinter kenn ich mich auch nicht aus.
CM
User
Beiträge: 2464
Registriert: Sonntag 29. August 2004, 19:47
Kontaktdaten:

Hoi Sugar Princes,

magst Du vielleicht noch die entscheidenen Zeilen Deines Codes zeigen? Ich bin mir sicher, daß wir noch klären können woran es liegt.

Oliver, auch hier sind Deine letzten Kommentare (in diesem und anderen Threads) eher wirr und nicht sehr hilfreich. Ein stack backtrace versucht übrigens lediglich durch alle eingebunden module hindurch den Teil des Codes zu finden, der die Ausnahme / den Fehler hervorgerufen hat. Im Falle von stark OOP orientierten Anwendungen, wie GUIs, sagt das einem zwar ungefähr wo die Beschwerde auftritt, aber wahrscheinlich hat man selber etwas falsch gemacht und es hapert bei der Übergabe von Paramtern - deshalb frage ich auch nach den entscheidenen Zeilen des Codes.

Gruß,
Christian
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Olliminatore hat geschrieben:Was ist den leondis?
Das soll wohl ich sein :roll:
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
-Sugar Princes-
User
Beiträge: 38
Registriert: Freitag 8. April 2005, 16:33
Wohnort: Krefeld

CM hat geschrieben:Hoi Sugar Princes,
magst Du vielleicht noch die entscheidenen Zeilen Deines Codes zeigen? Ich bin mir sicher, daß wir noch klären können woran es liegt.
jo klar :wink:
Leonidas hat geschrieben:
Olliminatore hat geschrieben:Was ist den leondis?
Das soll wohl ich sein :roll:
*grins da sag ich jetzt mal nix zu :P

----------------------------------------------------------------------------------

Code: Alles auswählen



# Farbe des Würfels (timecube,realcube,connectioncube)
e_colors = [0,"#8080ff","#ff0000","#70d090"]
# Geschwindigkeit der Rotation
showdelay = 20
# centric projection distance
dist = 7
# Hintergrund Farbe
canvascolor = "blue"


# Importiere: Tkinter Befehle;bestimmte mathematische Funktionen;
# copy für befehle die z.b. nicht durch [:] kopiert werden.
from Tkinter import *
import math
import copy

# Würfel
class HCube:
    # Neue (Objekt-) Instanz wird erzeugt
    def __init__(self):
        # Ecken des Würfels
        self.corners = [[-1.0,-1.0,-1.0,-1.0],[ 1.0,-1.0,-1.0,-1.0],
                   [-1.0, 1.0,-1.0,-1.0],[ 1.0, 1.0,-1.0,-1.0],
                   [-1.0,-1.0, 1.0,-1.0],[ 1.0,-1.0, 1.0,-1.0],
                   [-1.0, 1.0, 1.0,-1.0],[ 1.0, 1.0, 1.0,-1.0],
                   [-1.0,-1.0,-1.0, 1.0],[ 1.0,-1.0,-1.0, 1.0],
                   [-1.0, 1.0,-1.0, 1.0],[ 1.0, 1.0,-1.0, 1.0],
                   [-1.0,-1.0, 1.0, 1.0],[ 1.0,-1.0, 1.0, 1.0],
                   [-1.0, 1.0, 1.0, 1.0],[ 1.0, 1.0, 1.0, 1.0]]
        # Ränder des Würfels
        self.edges = [(0,1),(1,3),(3,2),(2,0),      # bottom1     # 1.Unterseite         
                 (4,5),(5,7),(7,6),(6,4),           # top1        # 1.Oberseite
                 (0,4),(1,5),(3,7),(2,6),           # sides1 up   # 1.Seite oben
                 (8,9),(9,11),(11,10),(10,8),       # bottom2     # 2.Unterseite
                 (12,13),(13,15),(15,14),(14,12),   # top2        # 2.Oberseite
                 (8,12),(9,13),(11,15),(10,14),     # sides2 up   # 2. Seite oben
                 (0,8),(1,9),(3,11),(2,10),         # connect 1,2 # Verbindung von 1 und 2
                 (4,12),(5,13),(7,15),(6,14)]
        # Randfarben des Würfels
        self.edgecolors=[e_colors[1]]*12+[e_colors[2]]*12+[e_colors[3]]*12
        # Punkte = Ecken
        self.points = copy.deepcopy(self.corners)
        # Würfelperspektive
        self.perspective=0

    def setproj(self,params):
        self.ax0,self.ax1,self.ax2 = params
        # print "Proj.",self.ax0,self.ax1,self.ax2
        # Aufruf: "Rahmen setzen / erstellen"

    def setrot(self,params):
        self.rot1,self.rot2 = params
        # print "Rot",self.rot1,self.rot2
        # Aufruf: "Rotation wird gesetzt"
   
    def setangle(self,deg):
        self.angle = deg
        # print "Angle:",self.angle
        # "Winkel des Würfels"

    # Perspektive des Würfels hier 3D
    def setperspective(self,value):
        self.perspective = value
        # print "Perspective:",value
        # "Perspektive des Würfels, Wert"

    # Rotieren aktivieren 
    def rotate(self,direction):
        w = direction*self.angle*math.pi/180.0
        co,si = math.cos(w), math.sin(w)
        ax1,ax2 = self.rot1,self.rot2
        for c in self.points:
            c[ax1],c[ax2] = co*c[ax1]-si*c[ax2],si*c[ax1]+co*c[ax2]

    # Würfel wird zusammengesetzt
    def project(self):
        ax0,ax1,ax2 = self.ax0,self.ax1,self.ax2
        p = [0]*len(self.points)
        # project points
        if self.perspective:
            for i in range(len(p)):
                f = dist/(dist-self.points[i][ax0]+1)
                p[i]=(f*self.points[i][ax1],f*self.points[i][ax2],self.points[i][ax0])
        else:   
            for i in range(len(p)):
                p[i]=(self.points[i][ax1],self.points[i][ax2],self.points[i][ax0])


        e = [0]*len(self.edges)
        for i in range(len(e)):
            a,b = self.edges[i]
            e[i] = (p[a][0],p[a][1],p[b][0],p[b][1],self.edgecolors[i],(p[a][2]+p[b][2])/2.0)

        # insert sort
        for stelle in range(1,len(e)):
            wert = e[stelle]
            i = stelle
            while 1:
                if i==0: break
                if e[i-1][5]<=wert[5]: break
                e[i]=e[i-1]
                i = i-1
            e[i] = wert
           
        return e
   
           
# Rahmenerstellung des Würfels   
class ProjectionFrame(Frame):
    # Neue (Objekt-) Instanz wird erzeugt
    def __init__(self,parent,hypercube, hcanvas, axname,**options):
        Frame.__init__(self,parent,**options)
        self.hcube = hypercube
        self.hcanvas = hcanvas

    # Aufruf "Rahmen erstellen"
    def projjob(self,values):
        self.hcube.setproj(values)
        self.hcanvas.show()

    # Aufruf "Perspektive des Würfels beginnen"
    def perspjob(self,values):
        self.hcube.setperspective(values)
        self.hcanvas.show()

# Rotieren des Würfels
class RotationFrame(Frame):
    # Neue (Objekt-) Instanz wird erzeugt
    def __init__(self,parent,hypercube,hcanvas, axname,**options):
        Frame.__init__(self,parent,**options)
        self.hcube = hypercube

    # Aufruf "Rotation beginnen"
    def rotjob(self,values):
        self.hcube.setrot(values)

# Kommandos des Würfels
class CommandFrame(Frame):
    # Neue (Objekt-) Instanz wird erzeugt
    def __init__(self,parent,hypercube, hcanvas, axname,**options):
        Frame.__init__(self,parent,**options)
        self.hcanvas = hcanvas

    # Auftrag beginnen "Rotation starten"
    def turnjob(self,param):
        self.hcanvas.setjob(param)
        
# Würfel
class HyperCanvas(Canvas):
    # Neue (Objekt-) Instanz wird erzeugt
    def __init__(self,parent,hcube,numx,numy):
        Canvas.__init__(self)
        self.running = 0
        self.hcube=hcube
        self.numx, self.numy = numx, numy

        self.center = numx/2
        self.scale = numx/2.0*0.5

        if canvascolor:
            self.cv = Canvas(parent,width=self.numx+7,height=self.numy+7,
                             background=canvascolor)
        else:
            self.cv = Canvas(parent,width=self.numx+7,height=self.numy+7)
        self.cv.grid(row=1,column=1,padx=3,pady=3)

        self.lines=[0]*len(hcube.edges)
        for i in range(len(self.lines)):
            self.lines[i]=self.cv.create_line(0,0,0,0,width=2)

    #         
    def setjob(self,code):
        self.job = code
        # print "Job:",self.job
        self.dothejob(code)

    #
    def dothejob(self,code):
        if code==0:
            self.cv.after(100)
            self.cv.update()
        elif code==1:
            self.running=0
            self.hcube.rotate(1)
            self.show()
        elif code==-1:
            self.running=0
            self.hcube.rotate(-1)
            self.show()
        elif code==2:
            self.running=1
            while self.running:
                self.hcube.rotate(1)
                self.show()
                self.after(showdelay)
 
        elif code==10:
            self.show()

    # Würfel               
    def show(self):
        # print "Showing!"
        lines = self.hcube.project()
        for i in range(len(lines)):
            x0,y0 = lines[i][0]*self.scale,lines[i][1]*self.scale
            x1,y1 = lines[i][2]*self.scale,lines[i][3]*self.scale
            c = lines[i][4]
            self.cv.coords(self.lines[i],int(0.5+self.center+x0),int(0.5+self.center-y0),
                           int(0.5+self.center+x1),int(0.5+self.center-y1))
            self.cv.itemconfigure(self.lines[i],fill=c)
        self.cv.update()   

# Feinheiten des Würfels (u.a. Größe)
class CubeShow:
    # Neue (Objekt-) Instanz wird erzeugt
    def __init__(self,axname):
        hypercube = HCube()
       
        self.root = Tk()
        # Größe des Würfels
        canvas = HyperCanvas(self.root,hypercube,900,900)
        # Aufbau / Umrandung / Rahmen des Würfels
        frame_left = ProjectionFrame(self.root, hypercube, canvas,axname, relief=FLAT, borderwidth=2)
        frame_left.grid(row=1,column=0,padx=3,pady=3,sticky=N)
        # Rotationsaufbau des Würfels
        frame_right = RotationFrame(self.root,hypercube,canvas,
                                    axname, relief=FLAT, borderwidth=2)
        frame_right.grid(row=1,column=2,padx=3,pady=3,sticky=N)
        # Aufbau
        frame_bottom = CommandFrame(self.root,hypercube, canvas,
                       axname,relief=SUNKEN, borderwidth=2)
        frame_bottom.grid(row=2,column=0,columnspan=3,pady=6)

        hypercube.setangle(1)

        frame_left.projjob((2,0,1)) # z->xy          # Drehungsrichtung des Würfels
        frame_left.perspjob(1)      # centric        
        frame_right.rotjob((2,0))   # rotate in yz   # Rotiere in yz (Drehungsrichtung)

        frame_bottom.turnjob(2)     # "Auftrag beginnen"

x = CubeShow("xyzt")
#x = CubeShow("1234")
# Zuordnung der Buchstaben zu den Zahlen
CM
User
Beiträge: 2464
Registriert: Sonntag 29. August 2004, 19:47
Kontaktdaten:

Hoi Sugar Prices,

Mir ist aufgefallen: Du hast ja immer noch genau dasselbe Problem wie im alten Thread! Wie wäre es mit einer Fortsetzung dieses Threads gewesen oder wenigstens einem Link dahin? Dann hätte man nicht erst danach suchen müssen ...

Zu Deinem Code:
Ich finde ihn schwer zu lesen: Kaum nützliche Kommentare. Mir scheint Du hast den Code von Leonidas genommen ohne ihn von A - Z einmal durchzuarbeiten und den Dingen, die Dir unklar sind, nachzugehen.

Zum Problem: Tritt es immer noch nur genau dann auf, wenn Du das Programm abbrichst? Wie wäre es Du läßt Dir in show() von HyperCanvas mal mit print ausgeben was die Paramter, die Du an coords() übergibst (self.lines, self.center usw.) eigentlich sind. Offensichtlich ist da irgendwo der Hund begraben, nicht? Irgendetwas geht da schief und wenn Du dem nachgehst und versuchst das Problem anzugehen, machst Du "debuging".

Mir fehlt leider Tkinter, sonst könnte ich noch mehr ins Detail gehen. Vielleicht kann da sonst noch jemand aushelfen?

Gruß,
Christian
-Sugar Princes-
User
Beiträge: 38
Registriert: Freitag 8. April 2005, 16:33
Wohnort: Krefeld

CM hat geschrieben: Zu Deinem Code:
Ich finde ihn schwer zu lesen: Kaum nützliche Kommentare. Mir scheint Du hast den Code von Leonidas genommen ohne ihn von A - Z einmal durchzuarbeiten und den Dingen, die Dir unklar sind, nachzugehen.
hmmm kann sein das du es übersehen hast - die programmierung ist ja ziemlich lang

nein ich habe versucht zu erklären was genau wo passiert indem ich die programmierung auseinander genommen habe

ich habe noch viele sachen entfernt gegenüber leonidas programmierung

im moment bin ich daran ein koordinaten system zu zeichnen mit dem würfel um das noch ein bisschen klarer zu bekommen
-Sugar Princes-
User
Beiträge: 38
Registriert: Freitag 8. April 2005, 16:33
Wohnort: Krefeld

-Sugar Princes- hat geschrieben: im moment bin ich daran ein koordinaten system zu zeichnen mit dem würfel um das noch ein bisschen klarer zu bekommen
soo das habe ich jetzt gemacht ... kann mir das jetzt somit auch bildlich den ablauf vorstellen nur weiß ich noch nicht genau wie ich mir das hier vorstellen soll

Code: Alles auswählen

        # Ecken des Würfels
        self.corners = [[-1.0,-1.0,-1.0,-1.0],[ 1.0,-1.0,-1.0,-1.0],
                   [-1.0, 1.0,-1.0,-1.0],[ 1.0, 1.0,-1.0,-1.0],
                   [-1.0,-1.0, 1.0,-1.0],[ 1.0,-1.0, 1.0,-1.0],
                   [-1.0, 1.0, 1.0,-1.0],[ 1.0, 1.0, 1.0,-1.0],
                   [-1.0,-1.0,-1.0, 1.0],[ 1.0,-1.0,-1.0, 1.0],
                   [-1.0, 1.0,-1.0, 1.0],[ 1.0, 1.0,-1.0, 1.0],
                   [-1.0,-1.0, 1.0, 1.0],[ 1.0,-1.0, 1.0, 1.0],
                   [-1.0, 1.0, 1.0, 1.0],[ 1.0, 1.0, 1.0, 1.0]]
das andere mit den zahlen als koordinaten hab ich verstanden nur versteh ich den zusammenhang nicht was diese 1.0 oder -1.0 darstellen soll

meine Vermutung: das das vielleicht die größe des würfels angibt (umfang) was ich mir aber nicht so ganz vorstellen kann

da andere befehle in der programmierung ja schon die größe "festlegen"

kann mir da einer weiter helfen? :?:
CM
User
Beiträge: 2464
Registriert: Sonntag 29. August 2004, 19:47
Kontaktdaten:

Hoi Sugar Princes,
-Sugar Princes- hat geschrieben: das andere mit den zahlen als koordinaten hab ich verstanden nur versteh ich den zusammenhang nicht was diese 1.0 oder -1.0 darstellen soll
Nun sag doch mal wo Du das ursprüngliche Program her hast, ja? Das könnte das Leben einfacher machen. Und wozu willst Du es denn eigentlich umschreiben?

Zu den "corners": Schau mal was in rotate() damit passiert. Hast Du schon mal was von einer Rotationsmatrix gehört? Diese Artikel dürften Dich aufklären:
http://de.wikipedia.org/wiki/Rotationsmatrix
http://mathworld.wolfram.com/RotationMatrix.html
Insbesondere der Artikel auf mathworld wird Deine Aufmerksamkeit erregen, weil es da so schöne rotierende Würfel gibt ;-). Du siehst also, daß der Zusammenhand mit der Größe des Würfels nicht so ganz gegeben ist ...

Im Übrigen hast Du eine ganz wesentliche Frage immer noch nicht geklärt: Wann tritt der Fehler auf? Bei welcher Aktion?

Gruß,
Christian
-Sugar Princes-
User
Beiträge: 38
Registriert: Freitag 8. April 2005, 16:33
Wohnort: Krefeld

CM hat geschrieben:Nun sag doch mal wo Du das ursprüngliche Program her hast, ja? Das könnte das Leben einfacher machen. Und wozu willst Du es denn eigentlich umschreiben?
ma gucken ob ihr mir noch helft wenn ich es sag :)

Brauch den Würfel für die Schule Informatik Unterricht

Mein Lehrer gibt uns für diese Aufgabe keine Einweisung etc. weil es eine freiwillige Arbeit ist die die Note aufbessert so gesehen habe ich am anfang wo ich mit dem würfel anfing keine ahnung gehabt

soweit ich weiß bin ich der einzige aus dem Differenzierungskurs der den Würfel macht :wink:

Problem ist das ich den für die Zeugnisse brauche ist jetzt das letzte Jahr Informatik

ich bin schon sehr weit gekommen aber wenn die erklärungen nicht besser werden wird da wohl nix draus :(

wenn ihr mir trotzdem noch weiter helfen wollt würde ich gerne meinen wieder komplett geänderten Code zeigen :mrgreen:
CM hat geschrieben:Zu den "corners": Schau mal was in rotate() damit passiert.
die werden mitgedreht :wink: wenn ich z.b. anstatt 1.0 - 5.0 mache dann sieht der würfel schon ganz anders aus wenn man ihn dann noch so bezeichnen darf :P

dadurch kann man ihn natürlich auch gleich vergrößern :D aber na ja die größe wie er jetzt ist, ist in ordnung
CM hat geschrieben: Hast Du schon mal was von einer Rotationsmatrix gehört? Diese Artikel dürften Dich aufklären:
http://de.wikipedia.org/wiki/Rotationsmatrix
http://mathworld.wolfram.com/RotationMatrix.html


bis gerad eben nicht :wink:
CM hat geschrieben: Insbesondere der Artikel auf mathworld wird Deine Aufmerksamkeit erregen, weil es da so schöne rotierende Würfel gibt ;-). Du siehst also, daß der Zusammenhand mit der Größe des Würfels nicht so ganz gegeben ist ...


*grins da sag ich mal nix zu :twisted:
CM hat geschrieben: Im Übrigen hast Du eine ganz wesentliche Frage immer noch nicht geklärt: Wann tritt der Fehler auf? Bei welcher Aktion?


wenn der würfel rotiert und ich auf das X gehe sprich abbruch :wink:

ich hab "Leonidas" *g gefragt ob man nicht einfach den würfel nach einer paar sekunden automatisch beenden kann das dann vll. die fehler nicht auftreten - aber ich hab nicht ganz verstanden wie ich das machen soll
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

-Sugar Princes- hat geschrieben:ich hab "Leonidas" *g gefragt ob man nicht einfach den würfel nach einer paar sekunden automatisch beenden kann das dann vll. die fehler nicht auftreten - aber ich hab nicht ganz verstanden wie ich das machen soll
Ich habe geantwortet, dass du einen Thread starten kannst, der nach einigen Sekunden (time.sleep) das Programm beendet (sys.exit). Jedoch ist das absolut keine Lösung. Und wenn du einfach die Fehlermeldung unsichtbar machen willsz, benenne es in datei.pyw um, dann bekommst du kein DOS Fenster und die Fehlermeldung verschwindet auch. Jedoch ist dies genausowenig eine saubere Lösung, damit wird nur der eigentliche Fehler "versteckt".
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
rayo
User
Beiträge: 773
Registriert: Mittwoch 5. November 2003, 18:06
Wohnort: Schweiz
Kontaktdaten:

Hi

Also ich habs ohne Fehler geschafft. Aber rausfinden kannst du es selber, da ich nicht deine Prüfung mache.

Ich gib dir aber ein paar Tips:

1. Fehlt der root.mainloop()
2. keine whileschlaufe zum berechnen machen sondern mit root.after arbeiten

Dann gehts

Gruss

PS: der Fehler kommt weil wenn du beendest Tk schon am beenden ist aber die while-schlaufe noch weiter Tk verwendet.
-Sugar Princes-
User
Beiträge: 38
Registriert: Freitag 8. April 2005, 16:33
Wohnort: Krefeld

rayo hat geschrieben:
2. keine whileschlaufe zum berechnen machen sondern mit root.after arbeiten

PS: der Fehler kommt weil wenn du beendest Tk schon am beenden ist aber die while-schlaufe noch weiter Tk verwendet.
kann ich nicht einfach einen " quit button " erstellen der den würfel komplett beendet dann würden auch die fehlermeldungen nicht entstehen ich hab es mir mal so gedacht

Code: Alles auswählen

# Quit Button
def Quit():
        root.destroy()
        
#main window 
root = Tk()
    
button = Button(root, text = 'Quit', command = Quit) 

button.pack(pady=20, padx = 20)
nur jetzt beendet der button das entstandende PoP up wo das quit steht - nicht den würfel selbst kann mir da einer helfen? danke
rayo
User
Beiträge: 773
Registriert: Mittwoch 5. November 2003, 18:06
Wohnort: Schweiz
Kontaktdaten:

Hi

Also wenn du ein 2. Fenster machen willst musst du ein Toplevel erstellen und nicht nochmals Tk aufrufen.


Gruss
-Sugar Princes-
User
Beiträge: 38
Registriert: Freitag 8. April 2005, 16:33
Wohnort: Krefeld

hi

ja davon habe ich schon gelesen bzw. gehört

ich wollte eigentlich den quit button direkt in den würfel einbauen nur irgendwie will der da nicht erscheinen

wenn du eine idee hast um den direkt in würfel zu machen bitte sagen :)

bzw. ob das überhaupt möglich ist so wie ich das gemacht habe

oder muss ich das mit dem TOPlevel machen ?
rayo
User
Beiträge: 773
Registriert: Mittwoch 5. November 2003, 18:06
Wohnort: Schweiz
Kontaktdaten:

mach doch einfach

Button(frame_bottom, text="Quit", command=root.destroy).grid(row=0, column=0)

Gruss

PS: wird dir wahrscheinlich aber nicht helfen
-Sugar Princes-
User
Beiträge: 38
Registriert: Freitag 8. April 2005, 16:33
Wohnort: Krefeld

nein, hilft mir leider nicht
CM
User
Beiträge: 2464
Registriert: Sonntag 29. August 2004, 19:47
Kontaktdaten:

Hoi Sugar Princes,

schön, daß jetzt auch Leute helfen, die richtig Ahnung von Tkinter haben - im Gegensatz zu mir. Aber es hilft nicht, wenn Du allen private Nachrichten schickst und dann bald keiner mehr weiß wie der Wissensstand der anderen ist. Und wenn Du nur einen Bestimmten fragst, mußt Du halt warten bis derjenige wieder Zeit und Lust hat ins Forum zu schauen - das kann u.U. dauern.

Zu der Sache mit der Informatikarbeit: Es wird Dir kein Lehrer glauben, daß Du dieses Program selber geschrieben hast, denn
1.) gibt es im Program ein krudes Gemisch aus Deutsch und Englisch (Kommentare & Code). Und so sieht man bei vielen Dingen auf den ersten Blick, was von Dir ist und was nicht.
2.) ist es zwar völlig legitim Code (=geistiges Eigentum anderer Leute) zu kopieren und zu nutzen - aber nur, wenn es ausdrücklich erlaubt ist und man auch zitiert oder sonst wie angibt was man woher genommen hat. Das tust Du nicht. Wenn Dein Lehrer nicht alle Augen zudrückt, kannst (nicht mußt) Du alleine dafür eine Sechs bekommen: Wegen Betrugsversuchs! (Sogar in NRW ;-) )
3.) Du hast offensichtliche Verständnisprobleme. Das kann ins Auge gehen. Warum muß ich wohl nicht schreiben, oder?

Zu Deiner Frage Deine Kommentare zu kommentieren: Na, meinetwegen. Aber ich finde, daß Du noch ein wenig mehr in Vorleistung treten solltest. Seid dem letzten Codepost ist einige Zeit vergangen und Du hast einige Tipps bekommen, die DU noch verwursten solltest. Dennoch:
1.) Docstrings fehlen völlig. Gerade Kommentare zu den Funktionen und Klassen könntest Du besser in Docstrings um- und ausbauen.
2.) Das allererste Kommentar ("# Farbe des Würfels (timecube,realcube,connectioncube") schaut seltsam aus: Am Anfang weiß man nicht was 'timecube','realcube' und 'connectioncube' überhaupt sind. Auch hier wieder: Schreibe doch einfach mit Deinen EIGENEN Worten dieses Kommentar.
3.) '# Geschwindigkeit der Rotation' sagst Du ist 'showdelay = 20': Geht es hier nicht eher um eine Einheit der Verzögerung?
4.) '# centric projection distance' ist nicht Dein Ausdruck. Was heißt das? Wofür steht es? Sagt Dir das Kommentar sofort worum es geht? Nein? Dann versuche die ersten zwei Fragen zu beantworten und es mit EIGENEN Worten neu auszudrücken (Stichworte sind natürlich auch ok)
5.) '# Importiere: Tkinter Befehle;bestimmte mathematische Funktionen;
# copy für befehle die z.b. nicht durch [:] kopiert werden.' Ist ein gutes Kommentar. Hier hast Du selber nachgeschaut, was wofür ist, nicht wahr?
6.) '# Würfel': Es gibt zwei Klassen, die mit '# Würfel' überschrieben sind. Ein bißchen dürftig und nichtssagend.
7.) '# Neue (Objekt-) Instanz wird erzeugt' vor __init__ ist überflüssig, denn das ist genau was eine __init__-Funktion macht. Besser ein Docstring zu __init__ der beschreibt, was __init__ braucht (im ersten Fall also nichts!) und was es macht. Ich schreibe IMMER hin wie man ein Objekt initialisiert. Ein Beispiel:

Code: Alles auswählen

class SAXSraw:
	"""
		class containing raw SAXS data and some initialization methods
	"""
	def __init__(self, intensity=None, ichannel=None, energy = None, echannel = None, **kwargs):
		"""
			Creates SAXSraw instance
			
			Possible input parameters are:
			- a list of intensity data (defaults to None)
                     - the corresponding list of channel data (defaults to None)
                     - a list of the response ('energy') spectrum (defaults to None)
                     - the corresponding list of channel data (defaults to None)
			- meta data (all default to None)
			- outstream buffer (defaults to sys.stdout)
			
			invoke like: x = SAXSraw(intensity data, intensity channels,[name,[meta,[out]]])
			e.g. x = SAXSraw([a list of intensity data],[a second list of corresponding channels],\
			name="some name", date="some date")

                    For the entire list of possible metadata see '_attributes' of the
                    module. Possible file formats are listed in '_supported_formats'
		"""
Du solltest also irgendwie deutlich machen, was geschieht und was gebraucht wird, damit es geschieht.
8.) '# Ecken des Würfels': Ja, aber warum sind das alles Werte von 1 und -1? Wenn Du es jemandem erklären willst, mußt Du schon ein paar Worte verlieren. Tipp: Rechne man ein paar Schritte einer Rotation nach. Nicht unbedingt für die ganze verschachtelte Corner-Liste. Einige Werte reichen, dann wird der Groschen schon fallen.
9.) '# bottom1 # 1.Unterseite ': Deutsch-Englisches Doppelkommentar. Muß ich dazu noch was sagen?
10.) '# Rotieren aktivieren
def rotate(self,direction):': rotate() ist eine ganz zentrale Funktion in Deinem Program, findest Du nicht auch? Was geschieht hier? Wie wird eigentlich rotiert? Was macht der sinus und der cosinus hier? Die beiden Links, die ich Dir gegeben habe - vielleicht möchtest selber noch googlen - helfen best. weiter das zu beantworten.
11.) Allgemein finde ich es gut, wenn man explizit sagt welche Paramter wo und wozu übergeben werden - zumindest wenn es nicht offensichtlich ist.
etc. etc.

Du findest vielleicht das ich kleinlich bin. Das stimmt :!: . Aber ich habe mal versucht so zu denken wie Dein Lehrer (oder wie ich selber denke, wenn ich Schüler / Studenten beurteilen soll): Hat der Mensch alles verstanden? Kann er / sie es erklären? Verstehe ich es selber (ohne Gehirnkrämpfe!) nachdem ich mir das Konvolut angeschaut habe? Ist alles schlüssig? Usw.

Ich will nicht rüde klingen, sondern versuche konstruktive Kritik zu leisten. Wenn mir das nicht gelungen ist, tut es mir leid. Nimm's mir nicht übel: Manchmal treffe ich nicht den richtigen Ton.

Na, jetzt solltest Du einige Anregungen haben. Jetzt bist Du gefordert.

Drücke die Daumen,
Gruß,
Christian

PS Warum die Einrückung im Beispiel so durcheinandergeraten ist, weiß ich auch nicht.

edit: Einmal editiert und noch Fehler rausgeschmissen.
Antworten