Python Forum
tkinter button acts normal ONLY after clicking off the window - Printable Version

+- Python Forum (https://python-forum.io)
+-- Forum: Python Coding (https://python-forum.io/forum-7.html)
+--- Forum: GUI (https://python-forum.io/forum-10.html)
+--- Thread: tkinter button acts normal ONLY after clicking off the window (/thread-9691.html)



tkinter button acts normal ONLY after clicking off the window - justin_m - Apr-23-2018

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.


RE: tkinter button acts normal ONLY after clicking off the window - justin_m - Apr-24-2018

I'm not getting any error messages.


RE: tkinter button acts normal ONLY after clicking off the window - woooee - Apr-24-2018

You start tkinter with mainloop(), i.e. root.mainloop() in your case. http://effbot.org/tkinterbook/button.htm


RE: tkinter button acts normal ONLY after clicking off the window - justin_m - Apr-24-2018

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.


RE: tkinter button acts normal ONLY after clicking off the window - Larz60+ - Apr-24-2018

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


RE: tkinter button acts normal ONLY after clicking off the window - justin_m - Apr-24-2018

Larz60+: I copied your code, and unfortunately it makes no difference on my end.


RE: tkinter button acts normal ONLY after clicking off the window - Larz60+ - Apr-24-2018

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'


RE: tkinter button acts normal ONLY after clicking off the window - justin_m - Apr-24-2018

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.


RE: tkinter button acts normal ONLY after clicking off the window - Larz60+ - Apr-24-2018

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