It depends primarily of what platforms you're aiming at.
If you target only PC platforms (which none of is very exotic), then you have many options regarding language (C++, Java, Python, Go, etc.) and cross-platform GUI framework (Qt, GTK, SWT, Swing, wxWidgets, etc etc). Portability shouldn't be main concern when choosing a language for PC-only program (pretty much everything that is not OS-specific should be portable).
If you want to target PC and something more (web or mobile), you need higher degree of portability. Architectural style is crucial, because you want to fence off platform-specific pieces from portable code. The most popular style that addresses portability requirement is layered architecture (portable code goes into middle layer). Each layer can (and often will) be written in different language. You may want to consider structuring your code in layers even in case of PC-only program (OS-specific things will probably pop out).
Language possibilities are narrowed when targeting something more than PC. Depending on which particular platforms you're interested in, it can also make writing everything in one language impossible (unless you're prepared for writing your own compiler).
- For PC and mobile, C++ is the right choice to write portable code (logic layer) in, because all mainstream mobile platforms support it. For mobile GUI - Qt or platform-specific solutions (Java, ObjC and C#). Choosing Qt can speed everything up (most of the code runs everywhere) but some low-level knowledge of Qt and mobile platforms may be required to make it work. The more GUI you have, the more profitable choosing Qt will be.
- Things get really complicated if you want your program to run on PC, web and mobile and you want PC and mobile version to be self-sufficient (working without server component). In this case there is no single language that will run everywhere. I would probably take PC+mobile approach for logic code (write it in C++) and then, either create bindings to other language available on web platform, or write server software in C++. Another possibility is to write logic in Java (PC+web approach) and then write (using LLVM) a compiler that translates java to languages available on targeted mobile platforms. Either way, extra effort is needed to make it work on third platform type.
Above list is neither exhaustive nor complete.
After choosing technologies, I recommend designing interfaces between layers, then planning the implementation.