Python Forum

Full Version: tkinter button acts normal ONLY after clicking off the window
You're currently viewing a stripped down version of our content. View the full version with proper formatting.
I have a mac 10.13.4, and am using python 3.4.4 .
Here is my code:

####################

from tkinter import *

root = Tk()
canvas = Canvas(root, height = 1000, width = 1000)
canvas.pack()

def button_function():
    print("hello")
button = Button(root, text="button", font = ("Helvetica", 25), command=button_function, height = 4, width = 25)
button.place(x = 63, y = 800)
####################

The button command functions perfectly, but the button itself does not show that it is being clicked on when I run the program. However, I accidentally discovered that if I click off the screen an back on, then the button shows when it is being clicked. I'd like to fix my program so that it acts this way all of the time. Any help would be greatly appreciated.
I'm not getting any error messages.
You start tkinter with mainloop(), i.e. root.mainloop() in your case. http://effbot.org/tkinterbook/button.htm
Larz60+: I read the link you gave me. Thank you for editing my post.

wooee: I added root.mainloop() and it doesn't make a difference.
I took the size arguments out. and use pack across the board,
you can add back)
You can use place, but then will have an issue with resizing.
from tkinter import *

root = Tk()
canvas = Canvas(root)
canvas.pack()


def button_function(event):
    print("hello")


button = Button(root, text="button", font=("Helvetica", 25))
button.pack()
button.bind('<Button-1>', button_function)

root.mainloop()
you forgot mainloop
Larz60+: I copied your code, and unfortunately it makes no difference on my end.
There is something wierd with python on the Mac then. This works perfectly on MS windows and Linux
Also python current version is 3.6.5, you're still running python 2.7 (support for this version ends in about 1.5 years).
I don't think that that is an issue with tkinter, but might be/
Onw think I noted is that your import statement uses a lower case 't' on tkinter.
On other systems, tkinter for 2.7 is spelt with an upper case 'T'
I have been using IDLE (3.4.4) to run python. I tried IDLE 3 (3.6.3) and it works now. They're both "3.something", I'm not sure what the the difference is between "IDLE" and "IDLE 3" is...

The newer version comes with this:
WARNING: The version of Tcl/Tk (8.5.9) in use may be unstable.
Visit http://www.python.org/download/mac/tcltk/ for current information.
which I'll have to address, but I'm just happy this seems to be fixed now.

Thanks everyone.
idle3 is for python 3.
If you are using python 2.7 you need idle2 (probably just plain idle)
try running from command line:
python programname.py