shlomif / PySolFC

A comprehensive, feature-rich, open source, and portable, collection of Solitaire games.
http://pysolfc.sourceforge.net/
GNU General Public License v3.0
453 stars 100 forks source link

Poor presentation on Mac OS X #115

Open scottfurry opened 5 years ago

scottfurry commented 5 years ago

Screenshot... https://imgur.com/6glSLwa Using MacOS High Sierra. Homebrew installed/updated and brewfile in project successfully executed. Presentation in menus and window decorations is just ...ah...UGH? Menu items are dark text on dark coloured background. Cant't read them unless mouse is scrolled over menu entry.

Either I missed a step in building the app bundle or something else is going on here.

scottfurry commented 5 years ago

A little more detail... Console output from python setup_osx.py py2app produced the following message (near end of printout to console):

Modules not found (conditional imports):
 * PIL (pysollib.mfxutil)
 * StringIO (pkg_resources._vendor.six, six)
 * com (pkg_resources._vendor.appdirs)
 * com.sun.jna (pkg_resources._vendor.appdirs)
 * com.sun.jna.platform (pkg_resources._vendor.appdirs)
 * jnius (pysollib.kivy.LApp, pysollib.kivy.tkhtml)
 * kivy.uix.behaviors (pysollib.kivy.toolbar)
 * kivy.uix.boxlayout (pysollib.kivy.toolbar)
 * kivy.uix.image (pysollib.kivy.toolbar)
 * ossaudiodev (pysollib.pysolaudio)
 * pygame (pysollib.pysolaudio)
 * pygame.base (pysollib.pysolaudio)
 * pygame.mixer_music (pysollib.pysolaudio)
 * pygame.rwobject (pysollib.pysolaudio)
 * pygame.time (pysollib.pysolaudio)
 * pysollib.pysolgtk.card (pysollib.pysoltk)
 * pysollib.pysolgtk.colorsdialog (pysollib.pysoltk)
 * pysollib.pysolgtk.edittextdialog (pysollib.pysoltk)
 * pysollib.pysolgtk.findcarddialog () [module alias]
 * pysollib.pysolgtk.fontsdialog (pysollib.pysoltk)
 * pysollib.pysolgtk.gameinfodialog (pysollib.pysoltk)
 * pysollib.pysolgtk.menubar (pysollib.pysoltk)
 * pysollib.pysolgtk.playeroptionsdialog (pysollib.pysoltk)
 * pysollib.pysolgtk.progressbar (pysollib.pysoltk)
 * pysollib.pysolgtk.selectcardset (pysollib.pysoltk)
 * pysollib.pysolgtk.solverdialog () [module alias]
 * pysollib.pysolgtk.soundoptionsdialog (pysollib.pysoltk)
 * pysollib.pysolgtk.statusbar (pysollib.pysoltk)
 * pysollib.pysolgtk.timeoutsdialog (pysollib.pysoltk)
 * pysollib.pysolgtk.tkcanvas (pysollib.pysoltk)
 * pysollib.pysolgtk.tkconst (pysollib.pysoltk)
 * pysollib.pysolgtk.tkhtml (pysollib.pysoltk)
 * pysollib.pysolgtk.tkstats (pysollib.pysoltk)
 * pysollib.pysolgtk.tkutil (pysollib.pysoltk)
 * pysollib.pysolgtk.tkwidget (pysollib.pysoltk)
 * pysollib.pysolgtk.tkwrap (pysollib.pysoltk)
 * pysollib.pysolgtk.toolbar (pysollib.pysoltk)
 * pysolsoundserver (pysollib.pysolaudio)

Relevent output from brew list --versions:

$ brew list --versions
autoconf 2.69
boost 1.69.0_2
cmake 3.14.3
cpanminus 1.9019
gettext 0.19.8.1
gnutls 3.6.7.1
icu4c 64.2
openssl 1.0.2r
p11-kit 0.23.15
pcre2 10.33
perl 5.28.1
pkg-config 0.29.2
pyenv 1.2.11
pyenv-virtualenv 1.1.3
python 3.7.3
python@2 2.7.16
tcl-tk 8.6.9
shlomif commented 5 years ago

@scottfurry : hi! I admit we didn't test too much on macos due to us lacking mac hardware. Is there anything in the console/terminal when you start pysol from the cmd line?

scottfurry commented 5 years ago

@scottfurry : hi! I admit we didn't test too much on macos due to us lacking mac hardware. Is there anything in the console/terminal when you start pysol from the cmd line?

python pysol.py
Traceback (most recent call last):
File "pysol.py", line 28, in <module>
init()
File "/Users/[paths]/pysolfc-src/pysollib/init.py", line 92, in init
from six.moves import tkinter

I'm presuming error message is derived from not output above where pysollib mentioned earlier is not found. My impression is that there is a missing "something" to tell python "find that library here" when it comes to pysollib.

But I don't know enough about python, let alone python w/ homebrew on a Mac, to say definitively. However, I'm will to try things. I've sort of got my head around the process to build the app bundle. I just think there's some python-library path settings that need to be tweaked.

And some updates to details may be needed. About box details seem dated. But that can be a seperate issue number.

shlomif commented 5 years ago

@scottfurry : try installing https://pypi.org/project/six/ using pip or maybe you need to set https://stackoverflow.com/questions/19917492/how-to-use-pythonpath .

scottfurry commented 5 years ago

@scottfurry : try installing https://pypi.org/project/six/ using pip or maybe you need to set https://stackoverflow.com/questions/19917492/how-to-use-pythonpath .

$ pip freeze
certifi==2019.3.9
pipenv==2018.11.26
random2==1.0.1
six==1.12.0

$PYTHONPATH is empty and putting in a value does not appear to resolve the issue. Tried:

sys.path.append(".")

In setup_osx.py after the call to import sys. Made things worse as app would terminate with problems opening plist files. Double checking installed modules from Brewfile.

scottfurry commented 5 years ago

Using makefile to execute testing. Initial make tests failed with error. (See here for backgound on error and fix). Editted gen_individual_import_tests.py line 18:

str.replace(d + "/" +
                               re.sub("\\.py$", "", f), "/", "."))

Python3 portions of test pased. Python2 failed(expected as I only want to build py3 version).

scottfurry commented 5 years ago

I am able to get the app bundle built on Mac High Sierra. And execution appears "okay", but there are some behaviours that do not seem "right". Have to study more.

Presentation problems appear to be a issue in app behaviour when a setting in Mac OS is enabled. Reference: General Settings dialog If user selects "Use dark menu and Dock", we get the problems enountered in last screen shot above. Without this enabled, everything appears as expected. This is not the same as "Dark Mode" in Mac Mojave, but is similar.

Researching. This article seems promising.

AntumDeluge commented 5 years ago

I'm stabbing in the dark here, but I wonder if this is an issue with Tkinter on OS X. PySolFC still uses Tkinter for its GUI elements, correct?

scottfurry commented 5 years ago

@AntumDeluge - I'll have to dig into this one tomorrow when I'm at my Mac machine. A search came up with this little nugget from homebrew about what version of TCL-TK gets installed. I didn't run into any errors when I did the brew install process but it does give me pause for thought. It should be better investigated/understood.

scottfurry commented 5 years ago

I'll also have to look into this reporting Gist of post, white text on white background being resolved with python update. Tomorrow's search.

AntumDeluge commented 5 years ago

I found this wiki page that lists some differences in the Tk code for OS X as opposed to Windows & Linux. Not sure if it will help in debugging. In the "Menu" section is says there shouldn't be any issues as the "Tk menu command is hooked into the Mac OS X global menubar".

scottfurry commented 5 years ago

Thanks for the link. A quick scan leads me to think this is directed at stock Mac software as they reference installed Py2/TKinter. No mention of homebrew/Py3, which is what I'm using to build against. Link does give some hints and details about detecting Mojave, which could be useful down the road.

shlomif commented 5 years ago

@scottfurry : any news?

scottfurry commented 5 years ago

Life got in the way... I'll put this on my plate for this week.

jnumm commented 5 years ago

I poked around some color-related code and managed to find a workaround for the invisible menu font color. Before committing to this solution you should know that I was just removing lines without knowing their original purpose.

The screenshot also shows that some toolbar icons stay blank. osx_menucolors

--- a/pysollib/winsystems/aqua.py
+++ b/pysollib/winsystems/aqua.py
@@ -40,8 +40,8 @@ def init_root_window(root, app):
     elif USE_TILE:
         style = ttk.Style(root)
         color = style.lookup('.', 'background')
-        if color:
-            root.tk_setPalette(color)   # for non-ttk widgets
+        #if color:
+        #    root.tk_setPalette(color)   # for non-ttk widgets

         if app.opt.tile_theme == 'aqua':
             # standard Tk scrollbars work on OS X, but ttk ones look weird
scottfurry commented 5 years ago

My dev is usually Linux (mac is used by spouse so I'm not always on it). So this bug got shuffled off with other issues.

Looks like some promise.

I had been wanting to approach this from the aspect of detect dark mode (High Sierra or Mojave). There was some articles (here(stackoverflow), here(apple dev), and here(blog) ).

Although all the links given had swift code examples, I want to believe that there was a "pythonic" variation that can be employed. Again, I just hadn't gotten there yet.

jnumm commented 4 years ago

Updates:

scottfurry commented 4 years ago

Will test w/ newer Tk.