views:

776

answers:

11

For the program idea I have, it requires that the software be written in one binary that is executeable by all major desktop platforms, meaning it needs an interpreted language or a language within a JVM. Either is fine with me, but the programming language has to balance power & simplicity (e.g. Python)

I know of wxPython but I have read that it's support on Mac OS X is fairly limited

Java sounds good & it looks good but it seems almost too difficult to program in

Any help?

+2  A: 

You could use Groovy to work around the Java complexities.

Still you'll need good foundations of Swing.

While the learning curve may be steep, the trade of of not having to completely re-write the whole application again for the next platform will be a good reward.

Bear in mind, that even though it is cross platform, you should consider different platforms still have different idioms ( e.g. Copy/Past in Windows is ctrl+v, ctrl+v while in Mac it is cmd+c, cmd+v )

OscarRyz
+5  A: 

I used Python with wxPython for quite a while and found it very easy to use. I now use Java with both Swing and SWT.

I prefer Java but that's just a personal preference so you shouldn't let that sway you.

I didn't find the transition from Python to Java that difficult. In terms of GUI, they both have the layout manager paradigm - the managers are different but not so different you'll have trouble switching.

Java has an absolute huge class library to the point where you probably don't need to write your own version of anything, just string together the components. I never really got that deep into Python but it may well be similar. One thing I did notice is that all the really good stuff I used in Python (e.g., s[-4:-1]) could still be done quite easily in Java. Both languages were a step up from C where I had to manage strings with my own libraries.

If you think wxPython is limited on MacOS, you should try Java. I run my Java code on Windows, Linux and other UNIXes without compatibility problems. Sadly, not Mac, so I can't really advise you there.

My advice, pick a smallish project - do it in both Python and Java - see how it runs on all the platforms you're interested in.

paxdiablo
+3  A: 
  • You can use any of languages targeting JVM, e.g. Jython (Python impl) and JRuby (Ruby impl).

  • You can try using Qt bindings for Python, Qt seems to support many of Mac OSX specifics.

elder_george
+1 for combing Python and Java.
whatnick
+1  A: 

I work on a program that has to run on Windows, Linux and OS X (and OS X is my development platform), and wxPython is what we use.

If I had a chance to start again, I'd probably go with PyQT (based on advice from friends), but wxPython will get the job done.

Jay P.
A: 

Java seems better for what you want.

Well what about the web application in Javascript?

Xolve
+4  A: 

Python with PyQt or the eventually-to-be-equivalent-but-gratis PySide seems the way to go -- after all, few languages are easier to program in than Java (which you consider "almost too difficult to program in"), Python is one of those few, Qt arguably the best cross-platform GUI toolkit in any language, and PyQt (now, but GPL or for-$$$) or PySide (eventually, gratis even if you want to close-source your own code) are powerful interfaces between Python and Qt.

Alex Martelli
+1  A: 

I think wxPython is pretty good, though I am not sure what you mean by "support on Mac OS X is fairly limited" but I have been porting a wxPython app (www.mockupscreens.com) to Mac and it wasn't that difficult with few tweaks e.g. some UI elements may not come up as you expected, as wxPython uses native UI elements, which can be an advanatage or disadvantage based on your requirements.

Other good option is PyQT which will give you consistent look on all platforms.

Anurag Uniyal
A: 

How about SWT

  • Cross Platform
  • Native Look and feel
  • Huge community
  • Constantly maintained/upgraded ( IBM backed )
  • Atleast one mega successful cross platform project
Surya
In addition, SWT has more native looking controls than other Java tools.
Redbeard 0x0A
+3  A: 

Consider Tcl/Tk. I'm not sure how you define "one binary that is executeable [sic] by all major desktop platforms" but Tcl probably meets this as well as java, and likely better than any other scripting language.

Using the tcl packaging technology of starkits you can either a) create a single file that can be run on any platform that has an appropriate runtime engine (and they are available for all major and many minor platforms), or you can package that platform-specific runtime engine and and cross-platform starkit into a single file executable for each platform.

The starkit technology is something other languages should aspire to. What you get is a complete, fully functional virtual file system within a single file. This lets you easily package up sound files, dll/.so files (which must be copied to disk for obvious (?) reasons), images, data, etc along with your executable code.

Tk, the graphical library, is very mature and has really good support on all platforms. Some people think it looks dated but those impressions are usually based on information that is at least 5 years old. Modern Tk looks quite good. For some examples see the tkdocs website. I's not clear whether you're more concerned with eye candy or functionality, but if it's functionality you're interested in then Tk is something to seriously consider.

Most agree that Tcl is an aquired taste but those that use it professionally usually swear by it. I've been doing wxPython programming the last several months and would switch back to tcl/tk in a heartbeat if given the opportunity.

Bryan Oakley
A: 

I would suggest going the wxPython route, I know that wxWidgets (which is what wxPython is using) can be made to have great looking Mac apps (look at PgAdmin3 from postgresql). While PgAdmin3 is not done in python, it was done with wxWidgets and looks fine on a mac.

Redbeard 0x0A
A: 

I use three cross-platform tools regularly: Realbasic from Realsoftware which is what Visual Basic v6 would have been if allowed to grow; Revolution from Runrev which is what Hypercard would have been if allowed to survive (and its neat using a scripting language whose syntax is basically English); and finally, Delphi Prism with Mono.

All are quite mature and yet expanding at a great rate. For instance, Revolution is just introducing a web-application feature to its language that is really easy to use.

Neal Campbell