2016-04-15 6 views
2

Der Versuch, eine einfache gui schreiben, die mehrere untergeordnete Klassen hat aber die Toplevel erkennt nicht die Attribute, die ich mit dem Befehl auf einer Schaltfläche, so dass alles, was der Benutzer in die Box eingibt . Ich habe keine Ahnung, warum es nicht auf das Kind Klasse arbeitenTkinter Befehl Probleme mit Toplevel auf Kindklasse

from Tkinter import * 
    import Tkinter as tk 
    import tkSimpleDialog 
    import tkMessageBox 

    class MainWindow(tk.Frame): 

     def __init__(self, *args, **kwargs): 
      tk.Frame.__init__(self, *args, **kwargs) 

      self.button = tk.Button(self, text="mx lookup",command=self.create_window) 
      self.button.pack(side="left") 





     def create_window(self): 

      l = tk.Toplevel(self) 
      l.entry = tk.Entry(l) 
      l.button = tk.Button(l, text="search mx", command l.enter) 

      l.entry.pack() 
      l.button.pack() 
     def enter(l): 
      dns =(l.entry.get()) 
        print(dns) 






    if __name__ == "__main__": 
     root = tk.Tk() 
     main = MainWindow(root) 
     main.pack(side="top", fill="both", expand=True) 

     root.mainloop() 

Antwort

0

Sie command l.enter Einstellung sollte es sein command = self.enter

Um das Widget (Toplevel) command = lambda: self.enter(l) passieren oder l.entry passieren und dann können Sie einfach rufen l.get()

auch ich glaube, Sie dns = l.entry.get() den Eintrag Widgets Text

Sie sollten selbst fügen Sie am Anfang Ihres drucken möchten eingeben Funkt Als Argument, um self.enter mit einem zusätzlichen Argument zu benennen, oder Sie könnten dies außerhalb Ihrer Klasse einfach umgestalten.

+0

es kommt noch 22 mit einem Fehler auf der Leitung nach oben sagt, dass es genau 1 Argument nehmen, aber es wurde 2 keine Lösung gegeben – Andy

+0

bearbeiten Siehe ich hinzugefügt – Pythonista

0

Sie haben viele Probleme mit dem Code:

  1. Sie haben einen Tippfehler in command l.enter. Korrigieren Sie es: command = self.enter
  2. Die Notationen l.entry und l.button sind falsch, weil dies in Python bedeutet, dass Sie bereits Attribute wie Eingabe und Schaltfläche erstellt haben, die Sie jetzt mit der Punktnotation zugreifen können, wie Sie getan haben. Sie sollten diese in etwas anderes umbenennen. Zum Beispiel: l_entry und l_entry.
  3. Folglich zu 2., in enter() müssen Sie l.entry.get()-l_entry.get()
  4. Um ändern, verwenden l_entry.get() in eingeben() -Methode, müssen Sie self.l_entry = tk.Button(self.l, text="search mx", command= self.enter) in create_window() schreiben und dann in enter() Schreib dns =(self.l_entry.get()) anstelle von dns =(l_entry.get()).

Ihr Programm wird nun wie folgt aus:

from Tkinter import * 
import Tkinter as tk 
import tkSimpleDialog 
import tkMessageBox 

class MainWindow(tk.Frame): 
    def __init__(self, *args, **kwargs): 
     tk.Frame.__init__(self, *args, **kwargs) 
     self.button = tk.Button(self, text="mx lookup",command=self.create_window) 
     self.button.pack(side="left") 

    def create_window(self): 
     self.l = tk.Toplevel(self)    
     self.l_entry = tk.Entry(self.l) 
     self.l_button = tk.Button(self.l, text="search mx", command= self.enter)  
     self.l_entry.pack() 
     self.l_button.pack() 

    def enter(self): 
     dns =(self.l_entry.get()) 
     print(dns) 

if __name__ == "__main__": 
    root = tk.Tk() 
    main = MainWindow(root) 
    main.pack(side="top", fill="both", expand=True) 
    root.mainloop()