Seite 1 von 1

oop frage -

Verfasst: Donnerstag 24. Juni 2004, 18:30
von rogen
ich habe zwei classen : eine gui klasse in den ich ein canvas habe.
in das canvas werden z.b. label klassen erzeugt - die auch eig. klassen sind.
jetzt möchte ich von einer label klasse zur der gui klasse ein signal schicken.
-----
classe gui: - in der gui class erzeuge ich eine label klasse
aus der label klasse möchte ich die gui klasse steuern.
--
hier mein code - mein Tkinter wysiwyg editor.

Code: Alles auswählen

from Tkinter import * 
global feld

schrift1 = "-*-Curier--R-*--*-140-*-*-*-*-ISO8859-1"
schrift2 = "-*-Times-Bold-R-*--*-240-*-*-*-*-ISO8859-1"

class gui:
    def __init__(self):
        self.root = Tk()
        self.flag = 0
        self.objzahler = 0
        self.felder = []
        self.var1 = StringVar()
        self.labelm = Radiobutton(self.root,text="label",indicatoron=0,variable=self.var1,value="label").place(x=1,y=1)
        self.entrym = Radiobutton(self.root,text="entry",indicatoron=0,variable=self.var1,value="entry").place(x=40,y=1)
        self.movm = Radiobutton(self.root,text="move",indicatoron=0,variable=self.var1,value="move").place(x=80,y=1)
        self.buttmaker = Button(self.root,text="code export",command=self.codemaker).place(x=120,y=1)
        self.builder = Canvas(self.root,bg="white",width=500,height=400)
        
        self.builder.place(x=1,y=33)
        self.builder.bind("<Motion>",self.move)
        self.builder.bind("<Button-1>",self.gedruckt)
        self.builder.bind("<ButtonRelease-1>",self.druckt_los)
        self.root.minsize(500,450)
        
        
    def move(self,event):
        global feld
           
        if self.flag==1:
            exec("self.obj" + str(feld) +".move(event.x,event.y)")
           
             
    def gedruckt(self,event):
        global feld
        self.flag = 1
        if self.var1.get() == "entry":
            self.objzahler = self.objzahler +1
            exec("self.obj" + str(self.objzahler) +"= objects(self.builder,'entry',event.x,event.y," + str(self.objzahler) +")")
            self.felder.append(str(self.objzahler))
            self.flag = 2
        if self.var1.get() == "label":
            self.objzahler = self.objzahler +1
            exec("self.obj" + str(self.objzahler) +"= objects(self.builder,'label',event.x,event.y," + str(self.objzahler) +")")
            self.felder.append(str(self.objzahler))
            self.flag = 2
        
           
    def druckt_los(self,event):
        self.flag = 2
        
    def listdel(self,objz):
        print "del"
        #self.felder.remove("self.obj"+str(objz)) # löschen aus der tabelle
    def codemaker(self):
        for f in self.felder:
            exec("neu =  self.obj" + f+".felder()")
            print neu

class objects:
    def __init__(self,root,was,xx,yy,name):        
        "Objekte im canvas erstellen"
        self.xx = xx
        self.yy = yy
        self.art = ""
        self.text =""
        self.width = ""
        self.height = ""
        self.bg = ""
        self.relief = ""
        self.bd = ""
        
        if was == "entry":
            self.zelle = Entry(root)
            self.zelle.bind("<Button-3>",self.edit)
            self.art = "Entry"
        if was == "label":
            self.zelle = Label(root,text="text")
            self.zelle.bind("<Button-3>",self.edit)
            self.art = "Label"
     
        self.name = name
        self.zelle.place(x=xx,y=yy)
        self.zelle.bind("<Enter>",self.anz)
    def delete(self):
        #gui.listdel(self.name)
        self.zelle.destroy()
        self.root2.destroy()
    def move(self,xx,yy):
        self.xx = xx
        self.yy = yy
        self.zelle.place(x=xx,y=yy)
    def anz(self,event):
        global feld
        feld = self.name
    def felder(self):
        "sollte einen feld mit den daten zurückgebebne"
        print "felder------------------"
        print "self.obj" + str(self.name)
        print self.art
        print self.width
        print self.height
        print self.bg
        print self.relief
        print self.bd
        print self.xx
        print self.yy
        feld = str(self.name)  # hier muss ich die werte vom objekt zurückgeben
        return feld
        
    def edit(self,event):
        print "edit"
        self.root2 = Toplevel()
        self.root2.minsize(250,350)
        self.lab1 = Label(self.root2,text="Label EDIT",font=schrift2).place(x=10,y=20)
        self.lab2 = Label(self.root2,text="width",font=schrift1).place(x=10,y=60)
        self.lab3 = Label(self.root2,text="heigth",font=schrift1).place(x=10,y=80)
        self.lab4 = Label(self.root2,text="text",font=schrift1).place(x=10,y=110)
        self.lab5 = Label(self.root2,text="bgcolor",font=schrift1).place(x=10,y=130)
        self.lab6 = Label(self.root2,text="relief",font=schrift1).place(x=10,y=160)
        self.lab7 = Label(self.root2,text="border",font=schrift1).place(x=10,y=180)
        self.buttok = Button(self.root2,text="ok",command=self.make).place(x=10,y=250)
        self.buttdel = Button(self.root2,text="del",command=self.delete).place(x=50,y=250)
        self.entr1 = Entry(self.root2)
        self.entr1.place(x=60,y=60)
        self.entr2 = Entry(self.root2)
        self.entr2.place(x=60,y=80)
        self.entr3 = Entry(self.root2)
        self.entr3.place(x=60,y=110)
        self.entr4 = Entry(self.root2)
        self.entr4.place(x=60,y=130)
        self.entr5 = Entry(self.root2)
        self.entr5.place(x=60,y=160)
        self.entr6 = Entry(self.root2)
        self.entr6.place(x=60,y=180)


    def make(self):
        if self.entr1.get() <> "":
            self.zelle["width"]=self.entr1.get()
            self.width = self.entr1.get()
        if self.entr2.get() <> "":
            self.zelle["height"]=self.entr2.get()
            self.height = self.entr2.get()
        if self.entr3.get() <> "":
            self.zelle["text"]=self.entr3.get()
            self.text = self.entr3.get()
        if self.entr4.get() <> "":
            self.zelle["bg"]=self.entr4.get()
            self.bg = self.entr4.get()
        if self.entr5.get() <> "":
            self.zelle["relief"]=self.entr5.get()
            self.relief = self.entr5.get()
        if self.entr6.get() <> "":
            self.zelle["bd"]=self.entr6.get()
            self.bd = self.entr6.get()

  
gu = gui()



mainloop()

Verfasst: Donnerstag 24. Juni 2004, 18:36
von Dookie
Hi rogen,

warum übergibst Du beim erstellen von object statt root nicht einfach das die instanz von gui.

Code: Alles auswählen

class objects:
    def __init__(self,gui,was,xx,yy,name):       
        "Objekte im canvas erstellen"
        self.gui = gui
        self.xx = xx
        self.yy = yy
        ...
dann hast Du über self.gui Zugriff auf die gui-Instanz und über self.gui.root auch zugriff auf das root-Fenster.


Gruß

Dookie

Verfasst: Donnerstag 24. Juni 2004, 20:02
von rogen
werde es ausprobieren
danke