Summary version:

As predicted a month ago, I got past the frustration, and now understand (and mostly like) Kivy, and I’m able to use it not just on my PC, but on my phone and Android tablets. Having worked through this pretty hard learning curve, my confidence in my ability to learn other, maybe even more complicated things, has increased. I’m now considering writing an app with Python on the web side and JavaScript (or more likely, Typescript) on a browser hosted client.
Long version:
I just reread my last blog entry, from 5/19 – a bit over month ago. It ends with “I also suspect that in a few weeks I’ll be writing another post about how cool Kivy is now that I “get it” and maybe talking about figuring out how to get my app running on my android tablet and phone.”
Well, here I am, a few (4) weeks later. Kivy is “cool” and I do “get it” now, and yes, it was a struggle. If you fight it and try to make it work like Delphi or Visual Basic, it will fight back harder and make you respect its ways, under penalty of ever more baffling behavior to try to figure out. But once you finally understand the relationship between “size” and “size_hint”, and “pos” and “pos_hint”, and the role of the “layout” controls, and let it worry about pixels, it works pretty well. And, once you figure out how to click “expand all”, then click on a different help topic, then click back to the current one in order to get the documentation to show up, you can even start to understand how it works.
And as far as “talking about figuring out how to get it running in Android”, it already does. I haven’t tried to package it into a distributable app, but I can open my .py files with Pydroid and click run, and other than needing to comment out the “window.size=480,400” line (which created a “main” window an inch high on my LG V35 phone), it “just worked”. VERY cool.
My biggest complaint with Kivy now is that the Y axis is zero at the bottom of the screen. In Delphi, 0,0 was the top left corner, so when your users expand the window, the coordinates of everything else didn’t have to be recalculated. There might be some hidden benefits that outweigh the costs this imposes – maybe Open-GL related? But it feels backwards.
The other big complaint is that the “KV Language” uses colons for assignments, while Python uses “=”. So I’m constantly writing things like “height = self.height-2” (Python) instead of “height: self.height-2” (KV), and getting some obscure error message from the KV interpreter. They should at least accept “=” in that context, so we can write it just like python code.
Anyway, I’m writing this because I’m far enough along to declare victory, and add Kivy to wxPython and Python itself in my list of “pretty hard” things that I’ve learned in the last year, with fairly short amounts of time invested – well under 100 hours for Kivy (so far). That post a month ago was written to vent my fear and build my confidence, but this one is about expressing my excitement!
First, I now know how to write apps in a language and GUI library that runs on my computers, my tablets, and my phone, as well as Linux (inc. Raspberry Pi’s) and even iOS and OS X. Previously, I had expertise in just one GUI-capable tool; Delphi. And for most of the 20 years I used it, it only ran on Windows, and only created Win32 style apps. In the pre-tablet pre-smartphone years, that was fine – but not what I need now. Python (+Kivy) is going to be a great tool set. 😊
The second thing I’m excited about is this additional evidence that I can still learn whatever skills I need implement whatever I want to build.
For example, one of my top project ideas will require a client app with a rich text editor, and a server app with a text database and some AI code that figures out keywords to index and stuff. I’ve considered that “too much to learn” to be able to even prototype the idea, but is it? I learned JavaScript enough to write a few small apps, and while that was 15+ years ago, the subset of it I need to know probably isn’t much bigger than what I learned then. The server side can be in Python. I’ll need to learn one of its server frameworks, but I doubt that will be harder than learning Kivy.
Bottom line: Learning hard stuff makes it easier to learn more hard stuff, both because it strengthens the skills needed, and because it boosts confidence. It’s a lot like expanding one’s comfort zone by doing things that are uncomfortable. I expand my “skills zone” by doing things I’m incompetent at. Compared to a professional programmer, I’m still pretty incompetent with PyCharm and Python, not just Kivy, but at least I’m comfortable with them! And, I’m confident that if my next project needs a JavaScript based client, I’ll be able to figure out how to write one.