2016-05-26 2 views
-1

Ich habe gerade angefangen, Python und Tkinter früher zu lernen, und ich kann keine Widgets im Fenster angezeigt werden. Es hat den Namen ich gab es und das Fenster selbst zeigt, wenn ich das Programm ausführen, aber keine Widgets erscheinen, noch die Hintergrundfarbe.tkinter Widget nicht angezeigt

import Tkinter 

class mainthing(Tkinter.Tk): 
    def _init_(self,parent): 
     Tkinter.Tk.__init__(self,parent) 
     self.parent = parent 
     self.initialize() 

    def initialize(self): 
     self.grid(bg="#001a00") 

     self.topEntry = Tkinter.Entry(self, bg = "#006600", fg = "#00ff00") 
     self.topEntry.grid(column=0, row=1, sticky="EW") 
     topEntry.pack() 

     yesBut = Tkinter.Button(self, text="Yes") 
     yesBut.grid(column=1, row=1) 

     query = Tkinter.Label(self, fg="#00ff00", bg="#001a00", anchor="W") 
     query.grid(column=1, row=0, columnspan=2, sticky="EW") 

if __name__ == "__main__": 
    app = mainthing(None) 
    app.title("RUN ON START TEST") 
    app.mainloop() 

Jede Hilfe wäre willkommen.

+2

* Ich habe gerade angefangen Python und tkinter heute früher Lernen *: Das ist, warum Ihr * Code * a *** BIG MESS * **. Es ist zu früh für Sie, hier eine Frage zu stellen. ISie finden eine Antwort auf jedes [Anfänger-Tutorial] (http://effbot.org/tkinterbook/tkinter-index.htm). Bitte besuchen Sie die [Hilfe] (http://stackoverflow.com/help) –

Antwort

2

Ich habe gerade angefangen heute

früher Python und tkinter Lernen Ich denke, es ist zu früh für Sie Fragen hier schreiben, wie Sie mehr über Python und Tkinter lesen müssen. Ihre Frage kann geschlossen werden, jedoch werde ich Ihnen eine Lösung mit einer kurzen Beschreibung Ihrer Fehler:

  • Zunächst einmal haben Sie einen Tippfehler: Wir schreiben __init__() und nicht _init()_
  • Sie müssen Frame passieren statt Tk in class mainthing(Tkinter.Tk)
  • ändern Tkinter.Tk.__init__(self, parent)-Tkinter.Frame.__init__(self, parent)
  • Das hat keinen Sinn: self.grid(bg="#001a00"). Entfernen Sie es.
  • Ihre Widgets sind nicht sichtbar, da Sie sie an eine Canvas oder eine Frame anhängen müssen.
  • Denken Sie zweimal über Ihre Hauptanwendung nach.
  • Nicht mischen pack() und grid().

ist hier eine schnelle Lösung mit Frame:

import Tkinter as Tk 

class mainthing(Tk.Frame): 
    def __init__(self,parent): 
     Tk.Frame.__init__(self, parent) 
     self.parent = parent 
     self.initialize() 

    def initialize(self): 

     self.parent.title("RUN ON START TEST")  
     self.parent.grid_rowconfigure(0,weight=1) 
     self.parent.grid_columnconfigure(0,weight=1) 
     self.parent.config(background="red") 

     self.frame = Tk.Frame(self.parent) 
     self.frame.pack(fill=Tk.X, padx=5, pady=5) 

     self.topEntry = Tk.Entry(self.frame, bg = "#006600", fg = "#00ff00") 
     self.topEntry.grid(column=0, row=1, sticky="ew") 


     yesBut = Tk.Button(self.frame, text="Yes") 
     yesBut.grid(column=1, row=1) 

     query = Tk.Label(self.frame, fg="#00ff00", bg="#001a00", anchor="w") 
     query.grid(column=1, row=0, columnspan=2, sticky="ew") 


if __name__ == "__main__": 
    root=Tk.Tk() 
    app = mainthing(root) 
    root.mainloop() 
2

Es gibt einige kleinere Fehler:

  1. es __init__, mit zwei Unterstrichen
  2. Hintergrund mit gesetzt `Config lesen sollte `
  3. topEntry.pack ist unnötig, da Sie verwenden grid

Mit diesen Korrekturen der Code sieht wie folgt aus:

import Tkinter 

class mainthing(Tkinter.Tk): 
    def __init__(self,parent): 
     Tkinter.Tk.__init__(self,parent) 
     self.parent = parent 
     self.initialize() 

    def initialize(self): 
     self.config(bg="#001a00") 

     self.topEntry = Tkinter.Entry(self, bg = "#006600", fg = "#00ff00") 
     self.topEntry.grid(column=0, row=1, sticky="EW") 

     yesBut = Tkinter.Button(self, text="Yes") 
     yesBut.grid(column=1, row=1) 

     query = Tkinter.Label(self, fg="#00ff00", bg="#001a00", anchor="w") 
     query.grid(column=1, row=0, columnspan=2, sticky="EW") 

if __name__ == "__main__": 
    app = mainthing(None) 
    app.title("RUN ON START TEST") 
    app.mainloop()