Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

`tkinter._test()` buttons are invisible when using pipenv

I'm learning Tkinter right now and trying to work through my first issue, but finding Google hasn't been helpful.

I'm running this code on Mac OS X 10.15.1 (Catalina)

I'm using Python 3.7 and my code looks like so (lots of boilerplate per PEP8 standards):

"""
Experiments in tkinter
"""


import tkinter as tk


def main():
    """
    Main entrypoint
    """

    tk._test()


if __name__ == "__main__":
    main()

This outputs the following warning to the console:

DEPRECATION WARNING: The system version of Tk is deprecated and may be removed in a future release. Please don't rely on it. Set TK_SILENCE_DEPRECATION=1 to suppress this warning.

It also displays a window with completely blank buttons:

Output of <code>tkinter._test()</code>

From my understanding these buttons should say "Click Me" and "Quit".

Also when I click on the top button it flashes black for a second like so:

Result of clicking on first button

After which the button is wider than before:

Clicking twice Clicking ten times

I assume the Tk version error may be related to the output behavior. However I can't seem to find a way to update Tk. What should I do here?

Update

After seeing @ShayneLoyd's answer (suggesting I needed an updated version of Python with an updated version of Tk) I began looking around some more and found this post on the Apple Discussion Boards which suggests you can use homebrew to install a version of Python which link's homebrew's own installed version of Tk. I tried this and it failed, so I Google'd the issue and found this StackOverflow post which seemed to suggest I can install ActiveTcl and it will work.

I installed ActiveTcl from ActiveState and went back to my project. At first, I ran it like so:

$> cd ~/Source/experiments/python/tkinter
$> ./test.py

This actually worked! I could read the buttons and it behaved like it should. Then I realized I was not using pipenv, so I did a quick test:

$> pipenv run ./test.py

Now I was back to the failure state. I updated my script to display the Tcl and Tk version and sure enough when I used pipenv it was loading Tcl/Tk 8.5.9 but when I didn't use pipenv it was loading 8.6.9

So how do I fix pipenv now?

like image 403
stevendesu Avatar asked Dec 22 '22 20:12

stevendesu


1 Answers

For anyone who's having the same issue and cannot switch Python version, you can easily bypass the "not showing text on buttons" problem by changing MacOs theme. System Preferences>General>Light Mode.

You should have in mind that you may encounter other problems.

like image 127
Alesof Avatar answered Dec 25 '22 11:12

Alesof