Tkinter Button does not appear on TopLevel?
Question: This is a piece of code I write for this question: [Entry text on a different
window?](http://stackoverflow.com/questions/10051721/how-to-fetch-the-entry-
text-on-a-different-window/10051863#10051863)

It is really strange what happened at `mySubmitButton`, it appears that the
button does not want to appear when it is first started, it will, however
appear when you click on it. Even if you click on it and release it away from
the button, that way it won't be send. I am suspecting if this only happen on
a mac, or it only happen to my computer, because it is a very minor problem.
Or it is something silly I did with my code.

    
    
    self.mySubmitButton = tk.Button(top, text='Hello', command=self.send)
    self.mySubmitButton.pack()
    

Am I missing something? I googled and found this [question and answer on
daniweb](http://www.daniweb.com/software-
development/python/threads/341851/tkinter-button-not-appearing-but-still-
useable). And I do a diff on them, can't figure out what he did "fixed", but I
did see the line is changed to `command=root.quit`. But it is different from
mine anyway...

Here is the full source code, and there is no error message, but the button is
just missing.

    
    
    import tkinter as tk
    
    class MyDialog:
        def __init__(self, parent):
            top = self.top = tk.Toplevel(parent)
            self.myLabel = tk.Label(top, text='Enter your username below')
            self.myLabel.pack()
    
            self.myEntryBox = tk.Entry(top)
            self.myEntryBox.pack()
    
            self.mySubmitButton = tk.Button(top, text='Hello', command=self.send)
            self.mySubmitButton.pack()
    
        def send(self):
            global username
            username = self.myEntryBox.get()
            self.top.destroy()
    
    def onClick():
        inputDialog = MyDialog(root)
        root.wait_window(inputDialog.top)
        print('Username: ', username)
    
    username = 'Empty'
    root = tk.Tk()
    mainLabel = tk.Label(root, text='Example for pop up input box')
    mainLabel.pack()
    
    mainButton = tk.Button(root, text='Click me', command=onClick)
    mainButton.pack()
    
    root.mainloop()
    

![enter image description here](http://i.stack.imgur.com/txcwl.png)

![enter image description here](http://i.stack.imgur.com/gRhKu.png)

  1. Adding another button right after this one, the second one actually appear. I thought it might be because I didn't call the same function, but I called the same one and it does the exact same thing it appears...
  2. Adding a empty label between them, doesn't work. The button still isn't being draw.

![enter image description here](http://i.stack.imgur.com/pEt6R.png)

PS: I am using Mac OS 10.5.8, and Tk 8.4.7.


Answer: I see the hello button, but I'm on windows 7.

I did a quick re-write of your example. I'll be curious if it makes any
difference for you.

    
    
    import tkinter as tk
    
    class GUI(tk.Tk):
        def __init__(self):
            tk.Tk.__init__(self)
    
            mainLabel = tk.Label(self, text='Example for pop up input box')
            mainLabel.pack()
    
            mainButton = tk.Button(self, text='Click me', command=self.on_click)
            mainButton.pack()
    
            top = self.top = tk.Toplevel(self)
            myLabel = tk.Label(top, text='Enter your username below')
            myLabel.pack()
    
            self.myEntryBox = tk.Entry(top)
            self.myEntryBox.pack()
    
            mySubmitButton = tk.Button(top, text='Hello', command=self.send)
            mySubmitButton.pack()
    
            top.withdraw()
    
        def send(self):
            self.username = self.myEntryBox.get()
            self.myEntryBox.delete(0, 'end')
            self.top.withdraw()
            print(self.username)
    
        def on_click(self):
            self.top.deiconify()
    
    gui = GUI()
    gui.mainloop()
    

