oop frage

Fragen zu Tkinter.
Antworten
home

wie zerstöre ich das root fenster über die zweite klasse
root2.destroy() funktioniert nicht.

Code: Alles auswählen


from Tkinter import *

class suchen:
	def __init__(self):
		
		self.root = Tk()
		self.butt = Button(self.root,text="hallo",command=self.anz)
		self.butt.pack()
	
	def anz(self):
		such2 = suchen2()
		


class suchen2:
	def __init__(self):
		print "ok"
		root.destroy()


such = suchen()
mainloop()

Dookie
Python-Forum Veteran
Beiträge: 2010
Registriert: Freitag 11. Oktober 2002, 18:00
Wohnort: Salzburg
Kontaktdaten:

Hi home,

Dein Code schaut etwas seltsam aus.

woher soll suchen2 wissen was root ist?

Code: Alles auswählen

from Tkinter import *

class suchen:
   def __init__(self):
      
      self.root = Tk()
      self.butt = Button(self.root,text="hallo",command=self.anz)
      self.butt.pack()
   
   def anz(self):
      such2 = suchen2(self.root)
      


class suchen2:
   def __init__(self, root):
      print "ok"
      root.destroy()


such = suchen()
mainloop() 
so sollte es zwar gehen, hat aber nix mit OOP zu tun. Ich würde sowas "verworrenen Code" nennen ;)


Gruß

Dookie
Gast

mit der zweite kasse erstelle ich eine tabelle.


der orginalcode:

Code: Alles auswählen

from Tkinter import *
from datenbank import *

schrift1 = "times 14 bold"
schrift2 = "times 14"
hg1 = "white"
relie ="solid"


class suchen:
	def __init__(self,root2=None):

		#root2 = Toplevel()
		self.root2 = Toplevel()
		self.LabUber1 = Label(self.root2,text="Suchfunktion", width= 18,height=1 ,font=schrift1,relief=relie,bd=1)
		self.LabUber1.grid(row=0,column=0,columnspan=2)
		
		self.LabVorname = Label(self.root2,text="Vorname", width= 18,height=1 ,font=schrift1,relief=relie,bd=1)
		self.LabVorname.grid(row=1,column=1)
		
		self.LabNachname = Label(self.root2,text="Nachname", width= 18,height=1 ,font=schrift1,relief=relie,bd=1)
		self.LabNachname.grid(row=2,column=1)
		
		self.LabAdresse = Label(self.root2,text="Adresse", width= 18,height=1 ,font=schrift1,relief=relie,bd=1)
		self.LabAdresse.grid(row=3,column=1)
		
		self.LabOrt = Label(self.root2,text="Ort", width= 18,height=1 ,font=schrift1,relief=relie,bd=1)
		self.LabOrt.grid(row=4,column=1)

		self.LabLand = Label(self.root2,text="Land", width= 18,height=1 ,font=schrift1,relief=relie,bd=1)
		self.LabLand.grid(row=5,column=1)

		self.LabVon = Label(self.root2,text="Von", width= 18,height=1 ,font=schrift1,relief=relie,bd=1)
		self.LabVon.grid(row=6,column=1)

		self.LabBis = Label(self.root2,text="Bis", width= 18,height=1 ,font=schrift1,relief=relie,bd=1)
		self.LabBis.grid(row=7,column=1)
		
		self.LabArt = Label(self.root2,text="Art", width= 18,height=1 ,font=schrift1,relief=relie,bd=1)
		self.LabArt.grid(row=8,column=1)
		


		self.EntVorname = Entry(self.root2)
		self.EntVorname.grid(row=1,column=2)
		self.EntVorname.bind("<Enter>",self.suc)
		
		self.EntNachname = Entry(self.root2)
		self.EntNachname.grid(row=2,column=2)
		
		self.EntAdresse = Entry(self.root2)
		self.EntAdresse.grid(row=3,column=2)
		
		self.EntOrt = Entry(self.root2)
		self.EntOrt.grid(row=4,column=2)

		self.EntLand = Entry(self.root2)
		self.EntLand.grid(row=5,column=2)

		self.EntVon = Entry(self.root2)
		self.EntVon.grid(row=6,column=2)

		self.EntBis = Entry(self.root2)
		self.EntBis.grid(row=7,column=2)

		self.EntArt = Entry(self.root2)
		self.EntArt.grid(row=8,column=2)
		
	def suc(self,master):
		frame = Frame(self.root2)
		frame.grid(row=10,column=1,columnspan=2)
		tab = tabelle
		from datenbank import *
		adresse = adresse()
		
		for a in  adresse.such():
			print a
			id = a[0]
			vorname = a[3]
			nachname = a[4]
			adresse = a[5]
			ort = a[7]
			y = a[0]
			tab(frame,id,vorname,nachname,adresse,ort,y)
			
	
	
		




class tabelle:
	def __init__(self,frame,id,Vorname,Nachname,Adresse,Ort,y):
		self.name = id
		self.fr = frame
		self.Butt = Button(frame,text=id,bg="white",bd=1,command= self.anzeige)
		self.lab1 = Label(frame,text=Vorname,bg="white",bd=1)
		self.lab2 = Label(frame,text=Nachname,bg="white",bd=1)
		self.lab3 = Label(frame,text=Adresse,bg="white",bd=1)
		self.lab4 = Label(frame,text=Ort,bg="white",bd=1)
		
		self.Butt.grid(row=y,column=1)
		self.lab1.grid(row=y,column=2)
		self.lab2.grid(row=y,column=3)
		self.lab3.grid(row=y,column=4)
		self.lab4.grid(row=y,column=5)
		
		
	def anzeige(self):
		print self.name
		such.root2.destroy()
		
		

Dookie
Python-Forum Veteran
Beiträge: 2010
Registriert: Freitag 11. Oktober 2002, 18:00
Wohnort: Salzburg
Kontaktdaten:

mit oop braucht (sollte) die 2. Klasse gar ned wissen wie das fenster geschlossen wird.
Hier mal ein Beispiel nach dem MVC (Model View Control) Konzept

Code: Alles auswählen

from Tkinter import *
class ViewControl:
    def __init__(self):
        self.root = TK()
        self.butt = Button(self.root,text="hallo",command=self.anz)
        self.butt.pack()

    def ant(self):
        self.model = Model(self)
    
    def destroy(self):
        self.root.destroy()

class Model:
    def __init__(self, vc):
        self.viewcontrol = vc
        # weitere Initialisierungen

    def ich_habe_fertig(self):
        print "ok!"
        self.viewcontrol.destroy()
        self.viewcontrol = None #zirkulare Abhaengigkeit aufbrechen

app = ViewControl()
mainloop()

Gruß

Dookie
Antworten