Creating GUI with Python in Linux - python

Quick question.
I'm using Linux and I want to try making a GUI with Python. I've heard about something like Qt, GTK+ and PyGTK but I don't know what they are exactly and what the difference between them is.
Is there any difference on how they work with different DEs like GNOME, KDE, XFCE etc.? Is there any IDE that allows you to create GUI like Microsoft Visual Studio does (for C#, C, Visual Basic etc.)?
Or should I maybe use another language other than Python to make GUI applications?

Your first step should be http://wiki.python.org/moin/GuiProgramming
Some tool-kits integrate better in one environment over the other. For example PyQt, PyKDE (and the brand new PySide) will play nicer in a KDE environment, while the GTK versions (including the WX-widgets) will blend better into a GNOME/XFCE desktops.
You should look at the environment you want to target. You can go for basic portable GUI kit, or you can to a deeper integration with tour DE, like use of integrated password manager, and configuration file parsers, that are integrated in a specific DE like KDE or GNOME.
You should also consider the dependency that your selection dictates, and what is come by default with a basic DE. For example, PyKDE in the KDE 3.X branch had a non trivial set of dependencies, while at the 4.X branch the plasma binding made the Python GUI programming dependency less of an issue.
There are several IDE tools, in different levels of completeness and maturity. The best thing is to try one ore more, and see what best fit your needs.

I would avoid using another language to make a GUI for Python.
I've had every good luck with wxwidgets, which is the python binding for WX, a cross-platform development system. It's pretty easy to learn and quite powerful. The problem with wxwidgets is that it is not installed by default, so your users will need to install it on every platform that they wish to run your application. Find more information about it at http://wxwidgets.org/.
If you want people to be able to use your program without installing anything else, use Tkinter, the GUI system that comes with Python.
I would avoid the Python bindings for GTK or KDE unless you already know those systems. They also need to be downloaded, and they do not seem to have as much adoption as wxwidgets.

Each desktop environment uses a specific toolkit to build it's components. For example, KDE uses Qt and GNOME uses Gtk.
Your use of a toolkit will be dependent upon what type of desktop environment you're targeting at, and if you want to target a wide range of desktops then use a toolkit which will work on many desktop environments, like Wx widgets which will work on Linux, Mac OS and Windows. For building simple GUI applications, Tkinter will do.

Use the glade UI designer and pyGtk bindings... that was my first ever experience with python and there are lots of blog posts and tutorials to help you get started

Use PyGTK. As important as the toolkit is its underpinnings, with PyGTK you use GLib as well, with its filesystem abstractions (python module gio) that are very important for the Linux desktop, its high-level cross-desktop functions such as glib.get_user_data_dir() and its other application framework tools, and GObject and its property and signals model.

Related

How does Python come off as a multi-platform programming language?

I'm talking about deploying Python-made, GUI-based, desktop applications via .app and .exe format for OSX and Windows. As far as I've gone into Python, I've only seen it as an application that runs on the Terminal / Command Prompt. I know that it is possible to create a user interface for it using various offerings on the internet (wxPython?). I just want to see how it passess off as a way for a developer to create mac and windows applications with as little code difference as possible.
I find that Python is a very good language for GUI programming. As you have stated, you can use the bindings for wxWidgets (wxPython), but there's also a binding for just about every other cross-platform GUI toolkit you can think of (Tk, Qt, GTK, FLTK, etc.). These GUI toolkits should allow you to make a program that will run unmodified on most OSs.
In terms of Python OS compatibility, it will behave virtually the same on all OSs, except for one or two modules such as mmap.
Using py2exe, py2app, or similar tools, you can embed a Python interpreter (along with your program's bytecode and it's dependencies) within an executable, making it easy to distribute an application. An end user can then open the program as they are used to. If you want the "security" of a compiled language, Python will not be the best language for you to use (but I prefer readability over safety :).
Another thing to consider with cross-platformness is what OS specific features you plan on using. Most GUI toolkits will not support things such as Microsoft's DWM (though you can use OS features through ctypes).
I think what you're looking for is PyQT and Tkinter. Both are GUI Libraries for use with Python. Both are cross-platform. Further, for packaging up .exe and .app for distribution, look at py2exe and py2app.
For Windows, the easiest approach is py2exe. There's also a similar project for MacOS. It's called py2app. Most GUI frameworks are cross platform. Just check their documentation, or even the home pages should have it.
Make good use of the os module. It has many function that will handle cross platform situations. A common example is file paths. When you build a path should it be backslash or forward slash? os.path.join handles that for you, and works based on which operating system it's running on. You shouldn't have to modify your code at all when shipping from OS to OS. It should run on Linux just as well, naturally.
By the way, MacOS often comes prepackaged with Python. As long as it's a somewhat recent version this can make the difference between a Hello World script being 1kb and 30mb, so avoid packaging Python with it. Unfortunately Windows isn't as well equip. Consider an option for "I already have Python installed" when downloading the exe.

GTK+ Dock Panel like visual component

I'm developing a small desktop application using python. I want it to be multi platform, and have a GUI similar (but simpler) to Eclipse. I know that the component that works just like eclipse layout are called DockPanel in Microsoft .NET.
Can someone help me out? Since eclipse is developed in GTK+ I guess I need only to discover the name of the GUI component, or maybe tell me another its name on GUI framework like Qt.
In GTK+ there is a docking library called gdl which is used by Anjuta IDE for example. However, this would not be a very cooperative solution for cross-platform use. I think MonoDevelop built there docking library based on this, but I could be wrong about that.
I've personally used this application in a PyGTK (GTK 2.x) IDE. It worked great--I could dock multiple windows anywhere on the main layout and load/save layouts to an XML file. I have not tried it with PyGObject (GTK+ 3.x) yet.
As was pointed out, Eclipse is not written in Python/GTK so you'll want to investigate what Java/SWT library eclipse uses for docking or look into docking options with a toolkit like wxWidgets for better cross-platform solution.
Not sure what a DockPanel is, but a class with 'Dock' in its name is 'QDockWidget'. This typically lives within a 'QMainWindow' and allows stacking and re-organization. There's an picture on http://doc.qt.nokia.com/latest/qmainwindow.html
I found it on pywx, the Advanced User Interface module:
http://www.wxpython.org/docs/api/wx.aui-module.html

implement a database application with GUI for Windows, written with Linux

I have the following data scheme that I want to turn into an application. A regular desktop GUI would probably the best.
UML Diagram http://img217.imageshack.us/img217/341/56836587.jpg
big version
The whole thing would be developed on a Linux (Ubuntu, Gnome) machine, and then used on a Windows Vista computer. If Windows is a problem, I might be able to just run it in a Linux VM later.
My programming language of choice would be Python. I have only used Qt for a two hour project, I have pretty much no experience with GUI. Would Qt work easily on Windows and not look to out of place there? Is GTK a way better option, or is that merely preference issue?
From talking on the #python channel, I gathered that storing the data in a SQLite database would be a good option, and accessing this data via the SQLAlchemy ORM would be better than writing SQL statements by hand. The latter is my usual approach, I want to use this project to learn something better.
Can I just design the dialogues in Qt Designer and use them with my Python objects?
You might want to check out Dabo.
Dabo is a 3-tier, cross-platform application development framework, written in Python atop the wxPython GUI toolkit
Camelot
If you are set on using Python them I think Qt would be am excellent choice. It's a fantastic framework that looks good and runs on many platforms. You won't be limited to Windows. Qt can be a bit intimidating but you won't be limited in terms of functionality. The Qt designer works well with Python.
SQLAlchemy works on all common desktop platforms, including Windows.

Are there an GUI libraries for Python that allow you to compile to an EXE (windows) and APP(Mac)?

I'm working on an application that I need to be cross-platform. I'd like to use Python for it, and am looking for GUI toolkits that make interface programming simple and easy. After a slight hunt, I found PythonCard. This looks like it fits the bill perfectly, but I'm not sure if it will be possible to compile this down to an appropriate executable for each operating system. I found these instructions, but they're 6 years old.
Whatever solution I choose must support the following:
Write one GUI to work on both Windows and Mac OSX
Must 'compile' into an easily distributable file for both windows/mac
Compiled file must not require Python to be installed on the users computer
Can anyone recommend a library/solution before I have to wade into the desolate world of Java?
I think the answer here is less about the particular GUI toolkit and more about distributing stand-alone python applications. Personally, I've found the tools for this a little less perfect than I'd like but, after some finagling, they get the job done. The most likely candidate that'd fit your needs is cx_Freeze. Though there's a Windows specific py2exe and Mac specific py2app that might fill the bill if cx_Freeze is insufficient.
Use PyInstaller to distribute an app using PyQt or WxPython gui toolkits. From the website:
PyInstaller is a program that converts (packages) Python programs into stand-alone executables, under Windows, Linux, and Mac OS X.
As for gui toolkits, PyInstaller is documented to work with Qt3, Qt4, and WxPython.
StackOverflow contributor dF, uses PyInstaller "for an app which depends on PyQt, PyQwt, numpy, scipy and a few more."
Hmm.
Maybe it'd better to move my post to comments, but. Why do you want to 'compile' python code, and why do you think that some GUI framework should provide some packaging/installation facilities?
In our company we wrote cross-platform GUI app and of course we must make it easily deliverable for customers. So, we found suitable GUI framework with python bindings (Qt), then we chosen the method to hide unneeded details about realisation and vanish dependancies (Py2Exe for Windows, Py2App for Mac, and nothing for linux, but you can try PyInstaller or cx-freeze).
Installation for every OS made in that OS' way, according to the least astonishment principle. That's why we did not pack linux version in some kind of binary executables.
If you want your application to look and feel native, then wxPython is the way to go. PyQt can look native, but it doesn't sound like it always behaves in a native way (according to some threads I've read). To build binaries, use py2exe or some such for Windows and py2app for Mac
This presentation walks through the process and also winds up with Py2exe and Py2app...
For Wxpython GUI designers check this question. I breifly tried boa-contstructor but I found it too limiting -as not all widgets are supported. AFAIK none of the wxpython designers support all widgets (out of the box atleast).
I personally find it faster and easier to hand code my GUI's. Id say it only took me a few days to become reasonably comfortable/familar wxpython. If you need to do anything other then creating a simple application then taking a little bit of time to learn wxpython will pay its dividends.
If your bound to the idea of having a descent GUI designer then your best bet is probabaly PyQt as this IMHO is the only toolkit that has a solid mature editor -Qt Designer
As for creating standalone excutables Ive only used py2exe for windows. py2app does the same for mac although I have not tried that yet.
For windows installers checkout this thread

Python GUI Library for Windows/Gnome

I need to create a desktop app that will work with Windows and Gnome(Ubuntu). I would like to use Python to do this. The GUI part of the app will be a single form with a message area and a couple of buttons.
The list of GUI's for Python seems overwhelming. I am looking for something simple if possible, the main requirements is it must work with Gnome(2.26 and up) and Windows XP/Vista/7.
You might want to check out wxPython. It's a mature project and should work on Windows
and Linux (Gnome).
PyGTK is a very popular GUI toolkit, but usually quite a bit easier to use on Linux than on Windows.
Have you checked the extensive list of GUI libs for Python? For something simple I recommend, as does the list, EasyGUI.
You can also try PyQt or PySide. Both are Python wrappers to Qt. PyQt is the original wrapper; PySide is a new project by Qt Development Frameworks/Nokia that has pretty much the same aims as PyQt, just with different licensing. PyQt is more mature, but licensing is more restrictive; PySide is quite new (in alpha/beta) but with more liberal licensing. However, for real information on licensing, check their site and preferably with a lawyer if it concerns you.

Categories

Resources