I am developing a python program (my native platform is Ubuntu) for which I would like to build a simple gui. I would like the GUI to be cross platform.I came across python-gtk/wxpython/qt. What is the best tool to use?
Thanks
suresh
Your best bet would be either wxPython or Qt, although I'd lean strongly towards wxPython based on my previous use. Both of these have fairly good fidelity on both Windows and OSX and feel and look like native applications.
GTK has marginal Windows support and pretty bad support on OSX. I would recommend against it.
I'm going to suggest tkinter. It's part of python, ridiculously easy to use, and of course is very cross platform.
Many people dismiss tkinter based on years-old knowledge, but tkinter has evolved a lot. Some say it looks ugly, but more often than not functionality and ease of use is more important. Tkinter is definitely the best pragmatic choice in my opinion.
That being said, however, there is no "best". Qt, Wx and Tk are all fine, all do pretty much the same, and are all more-or-less equally cross-platform. Pick any one of them and don't look back. Once you get experience with one of tnem you'll be in a position to decide for yourself which one is "best"
As Matt already suggested, wxPython should be the most portable choice. On Windows it uses the native GUI toolkit, on Linux it will use Qt as backend (I dunno what it does on OSX though, but you can probably find out all of that on their website).
Related
I have a two years of experience in programming of enterprise application's with Java and Visual Studio, and I'm new in Python and wxPython. So my question is: Can wxPython provide me enough rich GUI to create those same app's? My reason if using Python is in it's diversity, simplicity and fast development of app's. Thank you!
I think it depends on your definition of "rich." I use it and like to think it can make some fairly useful GUIs. Here's a screenshot of a wxPython app to work with sensor data I'm writing right now - not the most elaborate or complicated in the world, but so far it seems fairly intuitive for users:
I find the wxPython docs to be a little sparse at times, but as long as you've got the demo installed and the wxWidgets docs open it's a good toolkit to use.
wxGlade will give you the GUI skeleton. You will still need a separate text editor (I recommend Geany) to fill in the handlers.
I would certainly suggest using Python and its GUI libraries, but only you can really make the decision as to wether you think its better than visual studio or Java. The syntax of Python is very basic and I think many people can agree its a plesure to use when you get your head around it (no curly brackets etc). Python Tkinter is quite a simple GUI library and its ideal for making a basic application. WxPython on the other hand is far more advanced than Tkinter hence a richer user experience. The only problem I have had while using Wx is not being able to find suitable examples on the web to demonstarte how some things are done. Good luck, hope you find what your looking for. Karl
The wxPython demo shows most of the widgets that are available. I suggest that you take a look at this and see whether it will do what you need.
Features needed:
A framework, allowing me to build tab-based application with custom design (like in Hotot twitter client), keeping the native os window frame.
Compatible with Python.
My application will be running under Win/OsX/Linux/.
No Flash/Flex/AIR.
I also would like to ask if PySide does meet my requirements and is it worse or better than wxPython and Tkinter mentioned already?
Use Tkinter. It works on every platform that Python supports, is relatively easy to program in, looks pretty good on most platforms, and has the features you want. It's also built-in for most versions of Python, so your users (in many cases) will not have to install any external dependencies.
I find that Tkinter looks best on Mac OSX and Windows, and slightly outdated on some Gnome desktops. The most important feature, however, is that the API is extremely clean and easy to use and it is very lightweight. PyQt has a similar feature set, but, in my experience, its performance is significantly degraded when compared to Tkinter.
PySide is Nokia's Qt binding for Python. I'm not aware of what the differences are between it and PyQt. Ultimately, most GUI toolkits for Python are going to be cross platform and support the functionality you need. I suggest Tkinter because I feel it is the easiest and most pleasurable way to program GUI applications in Python.
I am the author of Hotot.
according to your requirements, the key for you to choose a framework is the UI framework should be able to access webview conveniently.
Hotot has several wrappers for different platforms. On Linux, we have both Qt and GTK version, on Windows, we provide a Qt version, on Mac, we have a Cocoa version, and of course we have a Chrome version. In a word, all they can easily access webkit.
PS: XULRunner is another good choice for native appearance.
Additionally to the advices given by other people, I suggest you to use PyQt which is a Python binding to Qt framework. It's widely used, cross-platform and feature-full.
Take a look at wxPython (based on wxWidgets). If you want to make it web-based, look into using Django.
Well, you mentioned PyHotOt, and it says (on its web site) that it uses pywebkitgtk, and PyGTK. PyGTK/PyWebKitGTK exists for windows. Did you check it out? I think OS X would be the weak link on GTK, but maybe it's pretty good too.
Python has many GUI toolkits. If I understand correctly, these toolkits typically take on the responsibility of rendering their own widgets (rather than relying on the operating system). This achieves cross-platform support at the cost of having widgets that don't necessarily look, feel and behave exactly like their native counterparts. Does Python have a GUI toolkit that is cross-platform and takes advantage of each system's native widgets?
According to GUI Programming in Python, there are at least two candidates:
Lucid
Unfortunately, this library seems to have disappeared. It's link now redirects to Icy Labs, a company that "designs and distributes components and devices for electronics and robotics development" (???).
PySWT
This is a port of the SWT library for Java (which I am already familiar with). This library doesn't feel like Python (for example, it retains the set* and get* methods that are common in Java). Therefore, I am curious to know if there is a more authoritative library that meets my needs.
Is wxWidgets an option? As far as I know, it integrates with whatever the OS has to offer - win32 on windows, gtk on Linux and, I think, Aqua on OSX.
What about Qt?
And it's attendant wrapper, PyQt?
http://en.wikipedia.org/wiki/PyQt
Qt for the most part looks native. I don't think you'll ever find a cross-platform toolkit that is uses native widgets exclusively and still be cross-platform. Those goals are to some extent mutually exclusive.
pyside LGPL bindings for qt. Note there is also PyQt which is GPL or paid for closed source use.
I found Toga recently. Think it's new, still missing a lot of native widgets but is pretty easy to pick up.
Last time I saw, GUIs in Python were extremely ugly, how's it today?
(saw some beautiful images on google images, but I don't know if are really Python's)
Python 2.7 and 3.0 ships with the themed tk ("ttk") widgets which look much better than previous versions of Tk (though, honestly, any competent GUI developer can make even older Tk look good). Don't let the people who don't know much about Tk sway you from using it, it's still a very viable toolkit for many, many tasks. You won't be creating a Photoshop clone with it, but how many people write those kinds of apps anyway?
I've been using wxPython for the past year and would still choose Tkinter over it for most tasks. Tkinter is much simpler and in many respects more powerful. The only advantage wxWidgets has is that it has more built-in widgets, but I find many of them a bit buggy and hard to use. For most apps that most people will write, Tkinter is still an excellent choice.
Some screenshots of themed widgets are available here:
http://code.google.com/p/python-ttk/wiki/Screenshots
Here's a screenshot of a Tkinter app that uses the themed widgets on the Mac:
http://www.codebykevin.com/phynchronicity-running.png
Tk is sill is the default GUI toolkit for Python, but it has a theme support from Python 2.7/3.1. It is not as ugly as before.
However, you can use some nice alternatives which still look better (IMHO) and have more functionalities :
wxPython : maybe the most used, cross platform and all, your applications will look the same as native.
PyQt or soon PySide : bindings for the Nokia Qt open source framework. There is more than just a GUI toolkit.
PyGTK : bindings for the GTK+ libraries
Here is more info : http://wiki.python.org/moin/GuiProgramming
Python has bindings for Tk, Qt, GTK, wx, and many more. There's no reason it should be any uglier than another language. You're probably thinking of a gui made with Tk, which has a reputation of being ugly. It's not specific to python, but it might be more common because it's very simple and ships with python by default.
See Gui Programming on the python wiki for more info.
I Think the latest Tkinter version offers native look for Macos. WxPython and QT offers native look for macos,windows and linux. GTK is abit ugly and prone to crashes on mac cause of the X11 implentation there.
Of course you could build your own GUI , that something I am trying to do with pygame.Let me clarify , I am not making a GUI library just GUI for my own application. I am making the graphics in the 3d app Blender.
My vote for Generic GUI goes to wxPython, tried it, looks great, easy to use and works like a charm across platforms. You will also find tons of info about it. Integrates well with opengl so if you want to do extreme guis on it , it can do them.
I need to decide on a GUI/Widget toolkit to use with Python for a new project. The target platforms will be Linux with KDE and Windows XP (and probably Vista). What Python GUI toolkit looks best and consistent with the native look and feel of the run time platform?
If possible, cite strengths and weaknesses of the suggested toolkit.
Thank you,
Luis
Python binding of Wx is very strong since at least one of the core developer is a python guy itself. WxWdgets is robust, time proven stable, mature, but also bit more than just GUI. Even is a lot is left out in WxPython - because Python itself offers that already - you might find that extra convenient for your project. Wx is the fastest especially on Win, because it lets render the OS and yes WxLicense is de facto LGPL. With XRC you have also a way like Glade to click you to a UI that you can reuse by different projects and languages. What is one major reason for me to use Wx is the fast and helping mailing list, never seen a flamewar, you get even often answers from core developers there, like the notorious vadim zeitlin++. The only thing con to Wx is the API that once grew out of MS MFC and has still its darker(unelegant) corners, but with every version you have some improvements on that as well.
QT done some nice stuff, especially warping the language but under python that don't count. They invented also a lot of extra widgets. In wx you have also combined, more complex widgets like e.g. for config dialog, but that goes not that far as in QT.
And you could of course use GTK. almost no difference under linux to Wx but a bit alien and slower under win. but also free.
For KDE and Windows, Qt is the best option. Qt is fine for Gnome/Windows too, but in that case you might prefer WxWidgets.
Qt bindings for python are here.
Remember that for closed source development you need a Qt license, plus a PyQt license.
For open source it should be free, but I'm not very familiar with the PyQt licensing.
Like others said, PyQt or wxPython... The technical difference between the two is more or less imaginary - it's a question of your comfort with the toolkit that matters, really.