oop frage -

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.
Antworten
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()
Dookie
Python-Forum Veteran
Beiträge: 2010
Registriert: Freitag 11. Oktober 2002, 18:00
Wohnort: Salzburg
Kontaktdaten:

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
Antworten