2016-04-25 3 views
0

Ich habe ein Elternfenster mit einem Text und Knopf. Beim Klicken auf die Schaltfläche im Elternfenster öffnet sich das Kind-Fenster, das das Eingabefeld und eine Schaltfläche enthält. Wenn ich nun etwas in das Eingabefeld des untergeordneten Fensters eingebe und auf submit des untergeordneten Fensters klicke, erscheinen die Daten, die im Eingabefeld des untergeordneten Fensters eingegeben wurden, im Textfeld des übergeordneten Fensters. Wie kann ich das tun? Mein Code ist wie folgt.Wie zeige ich einen Wert vom Children-Fenster zum Parent-Fenster in Python Tkinter an?

from tkinter import * 


class Application(Frame): 

    def __init__(self, master): 
     super(Application,self).__init__(master) 
     self.grid() 
     self.create_widgets() 

    def create_widgets(self): 
     self.t1=Text(self,width=10,height=2) 
     self.t1.grid(row=1,column=1) 
     self.b1=Button(self,text="create",command=self.onClick) 
     self.b1.grid(row=2,column=1) 

    def onClick(self): 
     self.top = Toplevel() 
     self.top.title("title") 
     self.top.geometry("300x150+30+30") 
     self.top.transient(self) 
     self.appc=Demo(self.top) 

class Demo: 

    def __init__(self, master): 
     self.master = master 
     self.frame = Frame(self.master) 
     self.widget() 

    def widget(self): 
     self.e1=Entry(self.master) 
     self.e1.grid(row=1,column=1) 
     self.b1=Button(self.master,text="submit",command=self.onSubmit) 
     self.b1.grid(row=2,column=1) 

    def onSubmit(self): 
     self.value=self.e1.get() 
     print(self.value) 
    root=Tk() 
    app=Application(root) 
    app.mainloop()` 

Antwort

0

Sie haben einen Verweis Ihres Text Widget, um Ihr Kind Fenster über Konstruktor übergeben. Danach haben Sie die volle Kontrolle über das Widget in Ihrer Demo Klasse. Also in Ihrer onSubmit Methode verwendet nur die insert Methode:

from tkinter import * 
class Application(Frame, object): 
    def __init__(self, master): 
     super(Application, self).\ 
      __init__(master) 
     self.grid() 
     self.create_widgets() 


    def create_widgets(self): 
     self.t1=Text(self,width=10,height=2) 
     self.t1.grid(row=1,column=1) 
     self.b1=Button(self,text="create",command=self.onClick) 
     self.b1.grid(row=2,column=1) 

    def onClick(self): 
     self.top = Toplevel() 
     self.top.title("title") 
     self.top.geometry("300x150+30+30") 
     self.top.transient(self) 
     self.appc=Demo(self.top, self.t1) 

class Demo(object): 
    def __init__(self, master, t1): 
     self.master = master 
     self.frame = Frame(self.master) 
     self.t1 = t1 
     self.widget() 

    def widget(self): 
     self.e1=Entry(self.master) 
     self.e1.grid(row=1,column=1) 
     self.b1=Button(self.master,text="submit",command=self.onSubmit) 
     self.b1.grid(row=2,column=1) 

    def onSubmit(self): 
     self.t1.insert(INSERT, self.e1.get()) 


root=Tk() 
app=Application(root) 
app.mainloop() 
+0

Er kann die 'Application'-Instanz selbst anstelle des 'Text'-Widgets übergeben, so:' self.appc = Demo (self.top, self) '. Mit dem 'Objekt' bekomme ich einen 'TypeError: muss Typ sein, nicht Classobj', aber ich benutze Python 2.7. Ich weiß nicht, welchen Unterschied es macht. – VRage

+0

Danke, es funktioniert jetzt @VRage – sujit

0

Letztlich Ihre Demo Klasse benötigt Zugriff auf Ihren t1 Text-Widget haben. Um dies zu erreichen, müssen wir unsere Instanz Application in Demo übergeben.


Dieses Stück Code zeigt, wie wir später in unserem Beispiel von Application in Demo als Referenz übergeben.

#Create Demo object with VVVVV 
    self.appc=Demo(self.top, self) 

nun in der Klasse Demo, Blick auf die Veränderungen unserer __init__:

#notice how we are including VVV something new? This is our instance of Application 
def __init__(self, master, parent): 
    self.master = master 
    self.frame = Frame(self.master) 

    #Dont forget to reassign it! VVVV 
    self.parent = parent 
    self.widget() 

Nun endlich lösen müssen wir Ihr Problem!

Now when i enter something in entry box of child window and click submit of child window the data entered in entry box of child window should appear in text box of parent window how can i do this?

def onSubmit(self): 

    #within our Application instance, look at the t1 widget, 
    #run the insert function with our new input! 
    self.parent.t1.insert(INSERT, self.e1.get()) 

Problem Solved


Hier ist der voll/vollständige Code:

from tkinter import * 
class Application(Frame): 
def __init__(self, master): 
    super(Application, self).\ 
     __init__(master) 
    self.grid() 
    self.create_widgets() 


def create_widgets(self): 
    self.t1=Text(self,width=10,height=2) 
    self.t1.grid(row=1,column=1) 
    self.b1=Button(self,text="create",command=self.onClick) 
    self.b1.grid(row=2,column=1) 

def onClick(self): 
    self.top = Toplevel() 
    self.top.title("title") 
    self.top.geometry("300x150+30+30") 
    self.top.transient(self) 
    self.appc=Demo(self.top, self) 

class Demo(): 
def __init__(self, master, parent): 
    self.master = master 
    self.frame = Frame(self.master) 
    self.parent = parent 
    self.widget() 

def widget(self): 
    self.e1=Entry(self.master) 
    self.e1.grid(row=1,column=1) 
    self.b1=Button(self.master,text="submit",command=self.onSubmit) 
    self.b1.grid(row=2,column=1) 

def onSubmit(self): 
    self.parent.t1.insert(INSERT, self.e1.get()) 


root=Tk() 
app=Application(root) 
app.mainloop() 

hoffe, das hilft! ~ Gunner

Verwandte Themen