Bewegbarer Würfel

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-

Hallo :)
ehm... ich hab hier so einen würfel, der dreht sich und man kann ihn auch verstellen, also das der sich auch in eine andere richtung dreht und so.
aber mein problem jetzt:
wenn ich die funktionen weg mache, (da ich will das er sich nur in eine richtung bewegt), funktioniert er nicht mehr.
könnt ihr mir vielleicht helfen und mir sagen wie ich die funktionen wegmachen kann, ohne das es nicht mehr funktioniert oder wie die funktion für nur einen würfel ist der sich nur in eine richtung bewegt und sonst nichts macht??
das ist ja dann doch die funktion für einen quader + bewegung, oder?!?!

danke,eure sugar princes :)

Und hier ist mein Würfel.... (in Python), bitte helft mir!!

Code: Alles auswählen

useIDLE = 0

# colors of cubes (timecube,realcube,connectioncube)
e_colors = [0,"#8080ff","#ff0000","#70d090"]

# delay for animation
showdelay = 20  #50
# centric projection distance
dist = 7
# background of canvas if necessary
canvascolor = "#ffffff" #None  # "#rrggbb"
# color for selected buttons
buttoncolor = "#c080a0"

from Tkinter import *
import math
import copy

class HCube:
    def __init__(self):
        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]]
        self.edges = [(0,1),(1,3),(3,2),(2,0),      # bottom1              
                 (4,5),(5,7),(7,6),(6,4),           # top1
                 (0,4),(1,5),(3,7),(2,6),           # sides1 up
                 (8,9),(9,11),(11,10),(10,8),       # bottom2
                 (12,13),(13,15),(15,14),(14,12),   # top2
                 (8,12),(9,13),(11,15),(10,14),     # sides2 up
                 (0,8),(1,9),(3,11),(2,10),         # connect 1,2
                 (4,12),(5,13),(7,15),(6,14)]
        self.edgecolors=[e_colors[1]]*12+[e_colors[2]]*12+[e_colors[3]]*12
        self.points = copy.deepcopy(self.corners)
        self.perspective=0

    def resetcube(self):
        self.points = copy.deepcopy(self.corners)
        ## print "cube resetted!"

    def setproj(self,params):
        self.ax0,self.ax1,self.ax2 = params
        ## print "Proj.",self.ax0,self.ax1,self.ax2

    def setrot(self,params):
        self.rot1,self.rot2 = params
        ## print "Rot",self.rot1,self.rot2 
    
    def setangle(self,deg):
        self.angle = deg
        ## print "Angle:",self.angle


    def setperspective(self,value):
        self.perspective = value
        ## print "Perspective:",value
        
    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]
    
    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
    
            
        
class ProjectionFrame(Frame):
    def __init__(self,parent,hypercube, hcanvas, axname,**options):
        Frame.__init__(self,parent,**options)
        self.hcube = hypercube
        self.hcanvas = hcanvas

        Label(self,text="Projection\naxis to plane",
              font=("Arial",10)).pack(side=TOP,fill=X,padx=5,pady=10) 

        self.projvar = IntVar()
        self.projvar.set(1)

        i=1
        for p in [(2,0,1),(1,2,0),(0,1,2),(3,0,1),(3,2,0),(3,1,2),
                  (2,0,3),(2,1,3),(1,0,3),(1,2,3),(0,1,3),(0,2,3)]:
            t = axname[p[0]]+"->"+axname[p[1]]+axname[p[2]]
            Radiobutton(self,text=t,font=("Courier",8),variable=self.projvar,
                        value=i, indicatoron=0,selectcolor=buttoncolor,
                        command=lambda par=p: self.projjob(par)
                         ).pack(side=TOP,padx=15)

            if i in [3,6,12]:
                Label(self,text=" ",
                      font=("Arial",1)).pack(side=TOP,pady=0) 
            i += 1

        self.perspvar = IntVar()
        self.perspvar.set(2)
        Radiobutton(self,text="parallel",font=("Arial",10),variable=self.perspvar,
                        value=1, indicatoron=0,selectcolor=buttoncolor,
                        command=lambda par=0: self.perspjob(par)
                         ).pack(side=TOP,padx=2,fill=X)
        Radiobutton(self,text="centric",font=("Arial",10),variable=self.perspvar,
                        value=2, indicatoron=0,selectcolor=buttoncolor,
                        command=lambda par=1: self.perspjob(par)
                         ).pack(side=TOP,padx=2,fill=X)


    def projjob(self,values):
        self.hcube.setproj(values)
        self.hcanvas.show()

    def perspjob(self,values):
        self.hcube.setperspective(values)
        self.hcanvas.show()
        
    
class RotationFrame(Frame):
    def __init__(self,parent,hypercube,hcanvas, axname,**options):
        Frame.__init__(self,parent,**options)
        self.parent = parent
        self.hcube = hypercube
        self.hcanvas = hcanvas

        Label(self,text="Rotation\nin plane",
              font=("Arial",10)).pack(side=TOP,fill=X,padx=5,pady=10) 

        self.rotplane = IntVar()
        self.rotplane.set(3)

        for value,pars in [(1,(0,1)),(2,(1,2)),(3,(2,0)),
                                (4,(0,3)),(5,(1,3)),(6,(2,3))]:
            t = axname[pars[0]]+axname[pars[1]]
            Radiobutton(self,text=t,font=("Arial",10),variable=self.rotplane,
                        value=value, indicatoron=0,selectcolor=buttoncolor,
                        command=lambda par=pars: self.rotjob(par)
                        ).pack(side=TOP,fill=X,padx=5)

        Label(self,text=" ",font=("Arial",20)).pack(side=TOP,fill=X,padx=5,pady=20) 
        self.killer = Button(self,text="Q\nU\nI\nT",font=("Arial",16),
                             command=self.quit,padx=4,pady=5)
        self.killer.pack(side=TOP,fill=X,padx=5)


    def rotjob(self,values):
        self.hcube.setrot(values)
 
    def quit(self):
        self.hcanvas.setjob(0)
        self.parent.after(200)
        ## print "Finished!\n"
        self.parent.destroy()


class CommandFrame(Frame):
    def __init__(self,parent,hypercube, hcanvas, axname,**options):
        Frame.__init__(self,parent,**options)
        self.parent = parent
        self.hcube = hypercube
        self.hcanvas = hcanvas


        self.cubereset = Button(self,text="reset\ncube",font=("Arial",10),
                             command=self.resetjob,padx=4,pady=2)
        self.cubereset.pack(side=LEFT,fill=Y,pady=1,padx=4)


        self.tempo = Scale(self,orient=HORIZONTAL, from_=1, to_=15,
                           length=100,showvalue=1,repeatinterval=200,
                           command=self.degreeset)
        self.tempo.pack(side=LEFT,padx=20,pady=5)

        Label(self,text=" ",font=("Arial",10)).pack(side=LEFT,fill=X,padx=2,pady=10) 
        self.runback = Button(self,text="<<",font=("Arial",12),
                             command=lambda par=-2: self.turnjob(par),padx=4,pady=4)
        self.runback.pack(side=LEFT,fill=Y,padx=2,pady=5)

        self.back = Button(self,text="<",font=("Arial",12),
                             command=lambda par=-1: self.turnjob(par),padx=4,pady=4)
        self.back.pack(side=LEFT,fill=Y,padx=2,pady=5)

        self.stop = Button(self,text="stop",font=("Arial",12),
                             command=lambda par=0: self.turnjob(par),padx=4,pady=4)
        self.stop.pack(side=LEFT,fill=Y,padx=2,pady=5)

        self.step = Button(self,text=">",font=("Arial",12),
                             command=lambda par=1: self.turnjob(par),padx=4,pady=4)
        self.step.pack(side=LEFT,fill=Y,padx=2,pady=5)

        self.run = Button(self,text=">>",font=("Arial",12),
                             command=lambda par=2: self.turnjob(par),padx=4,pady=4)
        self.run.pack(side=LEFT,fill=Y,padx=2,pady=5)

        Label(self,text=" ",font=("Arial",10)).pack(side=LEFT,fill=X,padx=5,pady=10) 
        Label(self,text="Hehe Herr Bartling :D na wer kann es nicht :-) ",font=("Arial",8),
              fg="#4040ff").pack(side=LEFT,fill=X,padx=5,pady=1) 


    def degreeset(self,event):
        self.hcube.setangle(self.tempo.get())

    def turnjob(self,param):
        self.hcanvas.setjob(param)

    def resetjob(self):
        self.hcube.resetcube()
        self.hcanvas.setjob(10)
        self.hcanvas.show()

class HyperCanvas(Canvas):
    def __init__(self,parent,hcube,numx,numy):
        Canvas.__init__(self)
        self.running = 0
        self.hcube=hcube
        self.OFFS = 5
        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 update(self):
        self.cv.update()

    def stop(self):
        self.running = 0

    def dothejob(self,code):
        if code==0:
            self.stop()
            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==-2:
            self.running=1
            while self.running:
                self.hcube.rotate(-1)
                self.show()
                self.after(showdelay)
        elif code==10:
            self.show()

                
    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()    
        
class CubeShow:

    def __init__(self,axname):
        hypercube = HCube()
        
        self.root = Tk()
        self.root.title("Würfel von Sugar Princes")

        Label(self.root,text="Würfel",font=("Arial",24)). \
        grid(row=0,column=0,columnspan=3,pady=3)

        canvas = HyperCanvas(self.root,hypercube,500,500)

        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)

        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)

        frame_bottom = CommandFrame(self.root,hypercube, canvas,
                       axname,relief=SUNKEN, borderwidth=2)
        frame_bottom.grid(row=2,column=0,columnspan=3,pady=6)

        self.root.after(250)
        self.root.update()
        
        hypercube.setangle(1)

        hypercube.resetcube()
        frame_left.projjob((2,0,1)) # z->xy
        frame_left.perspjob(1)      # centric
        frame_right.rotjob((2,0))   # rotate in yz
        
        frame_bottom.turnjob(0)     # stop

        frame_bottom.turnjob(2)     # stop

        if not useIDLE: self.root.mainloop()

x = CubeShow("xyzt")
#x = CubeShow("1234")
Edit (Leonidas): Code in Python Tags gesetzt, da sonst unlesbar, auch nicht für Python selbst.
querdenker
User
Beiträge: 424
Registriert: Montag 28. Juli 2003, 16:19
Wohnort: /dev/reality

..Herr Bartling..
:?: schon wieder Hausaufgabenhilfe?? :?:

gilt nicht nur für Studenten

mfg, querdenker
-Sugar Princes-

das ist doch lediglich eine frage wo der fehler liegt das das programm (würfel) dann nicht mehr geht ?!

was seit ihr denn hier nix schüler nix studenten nix arbeiter (die die das beruflich machen) was ist das dann hier? :roll:

ich habe doch den würfel und er geht ja auch (rotiert) aber dann kriege ich immer fehlermeldungen das sowieso nicht definiert ist :(
-Sugar Princes-

leider kommt es immer wieder vor, daß hier manche glauben, wir würden ihre Hausaufgaben lösen. Dafür ist dieses Forum echt nicht gedacht. Wenn einer bei einem Problem Hilfe braucht, geben wir gerne Hilfestellung, aber wenn hier Leute her kommen, die weder von Programmierung noch von Python eine Ahnung haben und glauben wir würden Ihnen fertige Lösungen liefern, so sind die hier falsch!
joa bevor sich hier keiner mehr meldet :!:

doben ist das der "besagte" ausschnitt :D

also ....

- 1. okay "Wenn einer bei einem Problem Hilfe braucht, geben wir gerne Hilfestellung," dann helft bitte
- 2. weiter "aber wenn hier Leute her kommen, die weder von Programmierung noch von Python eine Ahnung haben und glauben wir würden Ihnen fertige Lösungen liefern, so sind die hier falsch!" wenn ich keine ahnung hätte warum läuft dieser würfel dann das problem ist das da wenn ich was veränder eine fehlermeldung kommt - nennt ihr sowas keine ahnung von phyton 7 Seiten Programmierung die funktioniert das ist für mich bissel mehr als nix verstehen

also überlegt es euch noch bitte mal danke :)
mawe
Python-Forum Veteran
Beiträge: 1209
Registriert: Montag 29. September 2003, 17:18
Wohnort: Purkersdorf (bei Wien [Austria])

Hi!

Schon gut, schon gut, ich bin auch der Meinung, dass Du hilfeempfangswürdig bist :)
Aber vorher: Hilf mir, Dir zu helfen (das is aus irgendeinem Film, oder? :D).
-Sugar Princes- hat geschrieben: wenn ich die funktionen weg mache
Welche Funktionen meinst Du? Beschreib bitte mal genau was Du machen willst und warums dann nicht funktioniert, damit ich das nachvollziehen kann (bevor ich mich durch den Code wühle :)).

BTW: Cooles Programm, wollte selbst auch schon mal so etwas machen, ... naja, ich wollte :?

Gruß, mawe
Gast

mawe hat geschrieben:Hi!

Schon gut, schon gut, ich bin auch der Meinung, dass Du hilfeempfangswürdig bist :)
danke :cry: :) (weine vor freude 8) )
Aber vorher: Hilf mir, Dir zu helfen (das is aus irgendeinem Film, oder? :D).
-Sugar Princes- hat geschrieben: wenn ich die funktionen weg mache
kann ja mal hollywood fragen ob die nen film machen :wink:
Welche Funktionen meinst Du? Beschreib bitte mal genau was Du machen willst und warums dann nicht funktioniert, damit ich das nachvollziehen kann (bevor ich mich durch den Code wühle :)).
also das problem ist folgenes - hoffe du hast python :roll:

also wenn du das so öffnest ist da ja ein fenster das sich neu öffnet wo der würfel in der mitte rotiert

außen sind schalter links rechts sowie darunter

wenn ich jetzt aber die schalter wieder weg machen will funzt das programm nicht mehr - da der dann sagt xyz fehlt :roll:

hoffe du weißt ungefähr was ich meine !?

---------

kurz zusammengefasst: der würfel brauch sich nicht in verschiedene richtungen zu drehen sondern eine reicht das heißt man müsste "nur" die schalter kappen und die befehle die nicht mehr von nöten sind löschen - nur dann wenn ich das probiere funzt nix mehr :(
BTW: Cooles Programm, wollte selbst auch schon mal so etwas machen, ... naja, ich wollte :?

Gruß, mawe
joa immerhin - jetzt kannste ja gucken was du alles kannst :) bzw. was nicht

:wink:
-Sugar Princes-

ups namen vergessen :lol:

----------

na ja noch was von euch:
Edit (Leonidas): Code in Python Tags gesetzt, da sonst unlesbar, auch nicht für Python selbst.
hi leonidas, was meinst du mit python tags? ich hab nicht ganz verstanden was du damit meinst? denk mal das is so ne kleinigkeit da ich das übersehe :?
BlackJack

Anonymous hat geschrieben:wenn ich jetzt aber die schalter wieder weg machen will funzt das programm nicht mehr - da der dann sagt xyz fehlt :roll:
Ohne das Du etwas hinzufügst beschwert er sich das `xyz` fehlt? Ich meine das fehlt jetzt schon -- da ist nichts mit dem Namen `xyz`.

Das Programm da oben scheint in Ordnung zu sein. Da können wir Dir also nicht helfen. Mit Deinen dürftigen Fehlerbeschreibungen auch nicht.

Könntest Du Dich mal dazu herablassen nicht funktionierenden Quelltext zu zeigen und ein *genaue* Fehlerbeschreibung dazu zu geben!? Auf Ratespielchen hat hier keiner Lust.
Benutzeravatar
wuf
User
Beiträge: 1529
Registriert: Sonntag 8. Juni 2003, 09:50

Hallo Sugar Princes

Geniales Programm was du hier präsentierst!
-> GRATULATION <-
(Again: Python and Tkinter are very good companions!)

Habe in deinem Programm alle Schaltflächen mit
Ausnahme von 'QUIT' mittels ausdokumentieren
unwirksam gemacht und der Würfel dreht sich
bei mir hemmungslos weiter.

Mein Setup hier ist:

Python -> Version 2.3
LINUX -> SuSE 9.0

Gruss wuf :wink:
Take it easy Mates!
Gast

hallo,...

mal abgesehen davon, dass ich das mit den schülern und studenten nicht so eng sehe, diskussion hatten wir schon, brauchen wir nicht mehr :D finde ich doch folgendes seltsam:
wenn ich keine ahnung hätte warum läuft dieser würfel dann das problem ist das da wenn ich was veränder eine fehlermeldung kommt - nennt ihr sowas keine ahnung von phyton 7 Seiten Programmierung die funktioniert das ist für mich bissel mehr als nix verstehen
also wenn ich das richtig verstanden habe, dann hast du das geschrieben. oder?
ich denke wenn, dann kann das gar nicht sein, dass du deine aufgabe nicht selber lösen kannst.

mfg

rolgal
querdenker
User
Beiträge: 424
Registriert: Montag 28. Juli 2003, 16:19
Wohnort: /dev/reality

@rolgal: Ich hatte auch nicht die Absicht, eine neue Diskussion über ein altes Thema neu anzuschieben. Du hast das geschrieben, was ich gedacht habe.

@sugar
was seit ihr denn hier nix schüler nix studenten nix arbeiter (die die das beruflich machen) was ist das dann hier?
Was wir sind? Ich spreche erstmal nur für mich: Jemand, der keine Lust hat die Arbeit anderer Leute zu machen.

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

rolgal hat geschrieben:also wenn ich das richtig verstanden habe, dann hast du das geschrieben. oder?
ich denke wenn, dann kann das gar nicht sein, dass du deine aufgabe nicht selber lösen kannst.
Eben, das kommt mir auch seltsam vor. Ich denke nicht dass man sowas schafft, ohne zu wissen, wie man Buttons loswird.
-Sugar Princes- hat geschrieben:hi leonidas, was meinst du mit python tags? ich hab nicht ganz verstanden was du damit meinst? denk mal das is so ne kleinigkeit da ich das übersehe :?
Du hast deinen Code in Quote-phpBB-Tags gepostet. Dumm nur, dass Quote die Leerzeichen ignoriert. Aber ohne Leerzeichen versteht Python nicht wie das Programm ausgeführt werden soll, da ja Python durch die Einrückung die Funktionen aufteilt. Also gibt es in phpBB das Code-Tag.. und wir haben sogar eines, dass Syntaxhighlighting unterstützt, das Python-Tag.

Beispiel:
class Probability(object):
remaining = 100
field = []

def add(self, option, factor):
if factor <= self.remaining:
self.remaining -= factor
self.field.extend([option] * factor)
else:
self.field.extend([option] * factor - self.remaining)
self.remaining = 0

def random(self):
seed = len(self.field)
if seed < 100:
self.add(None, 100 - seed)
return random.choice(self.field)
gegen

Code: Alles auswählen

class Probability(object):
    remaining = 100
    field = []
    
    def add(self, option, factor):
        if factor <= self.remaining:
            self.remaining -= factor
            self.field.extend([option] * factor)
        else:
            self.field.extend([option] * factor - self.remaining) 
            self.remaining = 0
    
    def random(self):
        seed = len(self.field)
        if seed < 100:
            self.add(None, 100 - seed)
        return random.choice(self.field)
Was ist wohl besser?
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

querdenker hat geschrieben: Was wir sind? Ich spreche erstmal nur für mich: Jemand, der keine Lust hat die Arbeit anderer Leute zu machen.
mfg, querdenker
joa wer sagt denn arbeit =) brauch doch nur hilfe :wink: das programm steht ja :)

@Leonidas: jo jetzt weiß ich was du meinst sry das ich das falsch gepostet habe :oops:
CM
User
Beiträge: 2464
Registriert: Sonntag 29. August 2004, 19:47
Kontaktdaten:

Irgendwie scheint mir die Diskussion hier wenig sachlich. Sugar Princess, Deine Anfrage war vielleicht nicht sonderlich präzise (solltest Du womöglich immer noch nachbessern), aber doch durchaus legitim. Es ist doch normal aus Codestücken, Beispielen, die man hat, ein Skript zusammenzusetzen und dann, gerade am Anfang nicht alles zu verstehen. (Oder was auch immer die Geschichtes dieses Programms ist.)
Ich verstehe nichts von Tkinter, da wäre also Zurückhaltung angebracht - wie mir scheint, aber auch bei anderen.

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

CM hat geschrieben:Es ist doch normal aus Codestücken, Beispielen, die man hat, ein Skript zusammenzusetzen und dann, gerade am Anfang nicht alles zu verstehen.
Also wenn cih so gut Codesnippets zu funktionierenden Programmen bauen könnte, wär ich echt froh.
CM hat geschrieben:Ich verstehe nichts von Tkinter, da wäre also Zurückhaltung angebracht - wie mir scheint, aber auch bei anderen.
Ich verstehe auch nicht viel.. aber jetzt die anderen Funtionen rauszuschmeissen ist ja nicht schwer.

Sei's drum:

Code: Alles auswählen

#!/usr/bin/env python
# -*- encoding: latin-1 -*- 
useIDLE = 0

# colors of cubes (timecube,realcube,connectioncube)
e_colors = [0,"#8080ff","#ff0000","#70d090"]

# delay for animation
showdelay = 20  #50
# centric projection distance
dist = 7
# background of canvas if necessary
canvascolor = "#ffffff" #None  # "#rrggbb"
# color for selected buttons
buttoncolor = "#c080a0"

from Tkinter import *
import math
import copy

class HCube:
    def __init__(self):
        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]]
        self.edges = [(0,1),(1,3),(3,2),(2,0),      # bottom1             
                 (4,5),(5,7),(7,6),(6,4),           # top1
                 (0,4),(1,5),(3,7),(2,6),           # sides1 up
                 (8,9),(9,11),(11,10),(10,8),       # bottom2
                 (12,13),(13,15),(15,14),(14,12),   # top2
                 (8,12),(9,13),(11,15),(10,14),     # sides2 up
                 (0,8),(1,9),(3,11),(2,10),         # connect 1,2
                 (4,12),(5,13),(7,15),(6,14)]
        self.edgecolors=[e_colors[1]]*12+[e_colors[2]]*12+[e_colors[3]]*12
        self.points = copy.deepcopy(self.corners)
        self.perspective=0

    def resetcube(self):
        self.points = copy.deepcopy(self.corners)
        ## print "cube resetted!"

    def setproj(self,params):
        self.ax0,self.ax1,self.ax2 = params
        ## print "Proj.",self.ax0,self.ax1,self.ax2

    def setrot(self,params):
        self.rot1,self.rot2 = params
        ## print "Rot",self.rot1,self.rot2
   
    def setangle(self,deg):
        self.angle = deg
        ## print "Angle:",self.angle


    def setperspective(self,value):
        self.perspective = value
        ## print "Perspective:",value
       
    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]
   
    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
   
           
       
class ProjectionFrame(Frame):
    def __init__(self,parent,hypercube, hcanvas, axname,**options):
        Frame.__init__(self,parent,**options)
        self.hcube = hypercube
        self.hcanvas = hcanvas

        self.projvar = IntVar()
        self.projvar.set(1)

        self.perspvar = IntVar()
        self.perspvar.set(2)


    def projjob(self,values):
        self.hcube.setproj(values)
        self.hcanvas.show()

    def perspjob(self,values):
        self.hcube.setperspective(values)
        self.hcanvas.show()
       
   
class RotationFrame(Frame):
    def __init__(self,parent,hypercube,hcanvas, axname,**options):
        Frame.__init__(self,parent,**options)
        self.hcube = hypercube

    def rotjob(self,values):
        self.hcube.setrot(values)
 
    def quit(self):
        self.hcanvas.setjob(0)
        self.parent.after(200)
        self.parent.destroy()


class CommandFrame(Frame):
    def __init__(self,parent,hypercube, hcanvas, axname,**options):
        Frame.__init__(self,parent,**options)
        self.hcanvas = hcanvas


    def degreeset(self,event):
        self.hcube.setangle(self.tempo.get())

    def turnjob(self,param):
        self.hcanvas.setjob(param)

    def resetjob(self):
        self.hcube.resetcube()
        self.hcanvas.setjob(10)
        self.hcanvas.show()

class HyperCanvas(Canvas):
    def __init__(self,parent,hcube,numx,numy):
        Canvas.__init__(self)
        self.running = 0
        self.hcube=hcube
        self.OFFS = 5
        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 update(self):
        self.cv.update()

    def stop(self):
        self.running = 0

    def dothejob(self,code):
        if code==0:
            self.stop()
            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==-2:
            self.running=1
            while self.running:
                self.hcube.rotate(-1)
                self.show()
                self.after(showdelay)
        elif code==10:
            self.show()

               
    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()   
       
class CubeShow:

    def __init__(self,axname):
        hypercube = HCube()
       
        self.root = Tk()
        self.root.title("Würfel von Sugar Princes")

        Label(self.root,text="Würfel",font=("Arial",24)). \
        grid(row=0,column=0,columnspan=3,pady=3)

        canvas = HyperCanvas(self.root,hypercube,500,500)

        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)

        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)

        frame_bottom = CommandFrame(self.root,hypercube, canvas,
                       axname,relief=SUNKEN, borderwidth=2)
        frame_bottom.grid(row=2,column=0,columnspan=3,pady=6)

        self.root.after(250)
        self.root.update()
       
        hypercube.setangle(1)

        hypercube.resetcube()
        frame_left.projjob((2,0,1)) # z->xy
        frame_left.perspjob(1)      # centric
        frame_right.rotjob((2,0))   # rotate in yz
       
        frame_bottom.turnjob(0)     # stop

        frame_bottom.turnjob(2)     # stop

        if not useIDLE: self.root.mainloop()

x = CubeShow("xyzt")
#x = CubeShow("1234") 
Ist aber nur schnell zerlegt.
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

hi christian

also ich probiere es mal so genau wie möglich zu sagen

1.) oben ist der würfel in seiner ganzen form und man kann ihn drehen wie man will + geschwindigkeit regeln etc.
2.) ich habe probiert einfach nur das fenster zu erstellen und darin ein würfel der sich rotiert also ohne button ohne geschwindigkeit einfach nur der rotierende würfel
3.) klappt auch alles soweit nur dann wenn ich starten will kommt auf gut deutsch gar nix mehr

- z.b. fenster kommt nicht so groß wie oben sondern kleiner und da steht einfach nur würfel
- oder fenster wird erstellt mit buttons aber ich seh kein würfel in der mitte :(


ich hoffe ihr wisst jetzt was ich mein - einfach den würfel umwandeln damit er in einem fenster ist ohne die ganzen buttons bin schon den ganzen tag dabei aber noch bin ich nicht ganz dahinter gekommen also wer da was weiß bzw. mir helfen will bitte melden :wink:

zur fehlerbeschreibung : da steht dann z.b. konnte xxx nicht finden :( [ xxx = beispiel ]

edit: mit xxx mein ich einfach befehle die dann irgendwo fehlen damit das läuft :roll: :?
mawe
Python-Forum Veteran
Beiträge: 1209
Registriert: Montag 29. September 2003, 17:18
Wohnort: Purkersdorf (bei Wien [Austria])

Hi!

Also ich versteh auch nicht was die ganze Aufregung soll.

@-Sugar Princes-:
Hast Du schon mal gesehen was Leonidas gepostet hat? Ist das nicht genau das was Du willst?

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

mawe hat geschrieben:Hi!

@-Sugar Princes-:
Hast Du schon mal gesehen was Leonidas gepostet hat? Ist das nicht genau das was Du willst?

Gruß, mawe
hi mawe ups das hab ich ja voll übersehen :oops:
haben anscheinend fast gleich gepostet sodass mein post auf die zweite seite kam und ich dachte da is nix neues aber jetzt wo du es sagst

hab es gleich mal ausprobiert - hatte zwar kurze start probleme was aber nicht an den befehlen liegt sondern einen anderen grund hatte aber es lief dann doch ich werde es mir jetzt noch mal in ruhe anschauen

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

mawe hat geschrieben:Hi!

@-Sugar Princes-:
Hast Du schon mal gesehen was Leonidas gepostet hat? Ist das nicht genau das was Du willst?

Gruß, mawe
so noch mal dahin zurück jupp is es hab mir das jetzt mal die letzten tagen angeschaut und versucht dadurchzukommen hab immer direkt definitionen dabei geschrieben was da gerade passiert

ich hab leider das gefühl das vll. etwas zu ungenau ist bzw. bei einigen sachen kam ich ins stocken :? [ siehe # zeichen wo nix hinter steht ]

kannst du dir das mal bitte anschauen oder ein anderer vielleicht

hab da noch ein paar sachen rausgenommen die leonidas drin gelassen hat da die ja hier nicht gebraucht werden die buttons und so sind ja deaktiviert daher auch der aufruf der farbe am anfang

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

Code: Alles auswählen

useIDLE = 0
# colors of cubes (timecube,realcube,connectioncube)
# Farbe des Würfels (Zeitwürfel, realer Würfel , Verbindungswürfel)
e_colors = [0,"#8080ff","#ff0000","#70d090"]
# delay for animation
# Verzögerung für Animationen
showdelay = 20  #50
# centric projection distance
# zentraler Projektionsabstand ??
dist = 7
# background of canvas if necessary
# Hintergrund der Grafik falls vorhanden
canvascolor = "#ffffff" #None  # "#rrggbb"

# 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:
    # Eingebaute Funktion
    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

    # Erstelle Grafikfenster für Würfel
    def resetcube(self):
        self.points = copy.deepcopy(self.corners)
        ## print "cube resetted!"
        #  Schreibe Würfel - Start ??

    def setproj(self,params):
        self.ax0,self.ax1,self.ax2 = params
        ## print "Proj.",self.ax0,self.ax1,self.ax2
        # 

    def setrot(self,params):
        self.rot1,self.rot2 = params
        ## print "Rot",self.rot1,self.rot2
        # Farbe des Würfels = Rot
   
    def setangle(self,deg):
        self.angle = deg
        ## print "Angle:",self.angle
        # Wähle Winkel des Würfels aus

    # Perspektive des Würfels hier 3D
    def setperspective(self,value):
        self.perspective = value
        ## print "Perspective:",value
        # Wähle 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
        # Einsatzart
        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 Projektes       
class ProjectionFrame(Frame):
    # Eingebaute Funktion
    # Definiere Abkürzungen
    def __init__(self,parent,hypercube, hcanvas, axname,**options):
        Frame.__init__(self,parent,**options)
        self.hcube = hypercube
        self.hcanvas = hcanvas

        self.projvar = IntVar()
        self.projvar.set(1)

        self.perspvar = IntVar()
        self.perspvar.set(2)

    # 
    def projjob(self,values):
        self.hcube.setproj(values)
        self.hcanvas.show()

    #
    def perspjob(self,values):
        self.hcube.setperspective(values)
        self.hcanvas.show()

# 
class RotationFrame(Frame):
    # Eingebaute Funktion
    def __init__(self,parent,hypercube,hcanvas, axname,**options):
        Frame.__init__(self,parent,**options)
        self.hcube = hypercube

    #
    def rotjob(self,values):
        self.hcube.setrot(values)

#
class CommandFrame(Frame):
    # Eingebaute Funktion
    def __init__(self,parent,hypercube, hcanvas, axname,**options):
        Frame.__init__(self,parent,**options)
        self.hcanvas = hcanvas

    #
    def degreeset(self,event):
        self.hcube.setangle(self.tempo.get())

    #
    def turnjob(self,param):
        self.hcanvas.setjob(param)

#
class HyperCanvas(Canvas):
    # Eingebaute Funktion
    def __init__(self,parent,hcube,numx,numy):
        Canvas.__init__(self)
        self.running = 0
        self.hcube=hcube
        self.OFFS = 5
        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 update(self):
        self.cv.update()

    #
    def stop(self):
        self.running = 0

    #
    def dothejob(self,code):
        if code==0:
            self.stop()
            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==-2:
            self.running=1
            while self.running:
                self.hcube.rotate(-1)
                self.show()
                self.after(showdelay)
        elif code==10:
            self.show()

    # Zeige 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()   

# Einstellen des Rahmes (Größe, Ränderdicke) und Eingabe es Titels und des Textes       
class CubeShow:

    # Eingebaute Funktion
    def __init__(self,axname):
        hypercube = HCube()
       
        self.root = Tk()
        self.root.title("Würfel von -Sugar Princes-")

        Label(self.root,text="Würfel",font=("Arial",24)). \
        grid(row=0,column=0,columnspan=3,pady=3)

        canvas = HyperCanvas(self.root,hypercube,500,500)

        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)

        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)

        frame_bottom = CommandFrame(self.root,hypercube, canvas,
                       axname,relief=SUNKEN, borderwidth=2)
        frame_bottom.grid(row=2,column=0,columnspan=3,pady=6)

        self.root.after(250)
        self.root.update()
       
        hypercube.setangle(1)

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

        frame_bottom.turnjob(0)     # stop          # wenn man das löscht trotzdem funzt; notwendig ?!

        frame_bottom.turnjob(2)     # stop          # ????

        if not useIDLE: self.root.mainloop()

x = CubeShow("xyzt")
#x = CubeShow("1234")
# Zuordnung der Buchstaben zu den Zahlen
------------------------------------------------------------------------------

beim beenden des würfels wird noch eine fehlermeldung angezeigt is da was was nicht sein sollte?

Code: Alles auswählen

Traceback (most recent call last):
  File "C:\Dokumente und Einstellungen\Standard\Desktop\Rotierender Würfel.pyw", line 292, in ?
    x = CubeShow("xyzt")
  File "C:\Dokumente und Einstellungen\Standard\Desktop\Rotierender Würfel.pyw", line 288, in __init__
    frame_bottom.turnjob(2)     # stop          # ????
  File "C:\Dokumente und Einstellungen\Standard\Desktop\Rotierender Würfel.pyw", line 168, in turnjob
    self.hcanvas.setjob(param)
  File "C:\Dokumente und Einstellungen\Standard\Desktop\Rotierender Würfel.pyw", line 198, in setjob
    self.dothejob(code)
  File "C:\Dokumente und Einstellungen\Standard\Desktop\Rotierender Würfel.pyw", line 226, in dothejob
    self.show()
  File "C:\Dokumente und Einstellungen\Standard\Desktop\Rotierender Würfel.pyw", line 246, in show
    int(0.5+self.center+x1),int(0.5+self.center-y1))
  File "H:\INFORM~1\Phyton\lib\lib-tk\Tkinter.py", line 2039, in coords
    self.tk.splitlist(
TclError: invalid command name ".13799992"
-----------

danke schonmal im voraus :)
Zuletzt geändert von -Sugar Princes- am Montag 11. April 2005, 17:09, insgesamt 1-mal geändert.
BlackJack

Jetzt soll Dir also jemand das Programm erklären helfen, das von Dir ist, und von dem Dein Lehrer nicht geglaubt hätte, das Du das hinbekommst!? Interessant. :wink:
Antworten