misc:gui_frameworks_for_linux
Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revisionLast revisionBoth sides next revision | ||
misc:gui_frameworks_for_linux [2016/05/10 19:47] – [wxPython (Phoenix)] mithat | misc:gui_frameworks_for_linux [2017/05/29 19:27] – mithat | ||
---|---|---|---|
Line 2: | Line 2: | ||
===== Python-centric ===== | ===== Python-centric ===== | ||
+ | |||
+ | ==== Tkinter ==== | ||
+ | |||
+ | **TL;DR**: Perhaps OK for small, one-file utility apps | ||
+ | |||
+ | Pros | ||
+ | * Comes out of the box with Python. | ||
+ | |||
+ | Cons | ||
+ | * Look and feel are a real buzzkill on Linux, possibly also on other platforms---even with themed widgets. The ugliness of menus is pretty much a deal killer | ||
+ | * No standard GUI builder, though a few 3rd party ones exist. | ||
+ | |||
+ | <file python tkdemo.py> | ||
+ | from tkinter import * | ||
+ | from tkinter import ttk | ||
+ | |||
+ | def do_nothing(): | ||
+ | print(' | ||
+ | |||
+ | root = Tk() | ||
+ | root.option_add(' | ||
+ | s=ttk.Style() | ||
+ | s.theme_use(' | ||
+ | |||
+ | # Menubar | ||
+ | menubar = Menu(root) | ||
+ | root.config(menu=menubar) | ||
+ | |||
+ | filemenu = Menu(menubar) | ||
+ | filemenu.add_command(label=' | ||
+ | filemenu.add_command(label=' | ||
+ | filemenu.add_separator() | ||
+ | filemenu.add_command(label=' | ||
+ | |||
+ | editmenu = Menu(menubar) | ||
+ | editmenu.add_command(label=' | ||
+ | editmenu.add_command(label=' | ||
+ | editmenu.add_command(label=' | ||
+ | |||
+ | menubar.add_cascade(label=' | ||
+ | menubar.add_cascade(label=' | ||
+ | |||
+ | # Toolbar | ||
+ | toolbar = ttk.Frame(root) | ||
+ | |||
+ | tb_foo = ttk.Button(toolbar, | ||
+ | tb_foo.pack(side=LEFT, | ||
+ | tb_bar = ttk.Button(toolbar, | ||
+ | tb_bar.pack(side=LEFT, | ||
+ | |||
+ | toolbar.pack(side=TOP, | ||
+ | |||
+ | # Status bar | ||
+ | status = ttk.Label(root, | ||
+ | status.pack(side=BOTTOM, | ||
+ | |||
+ | # Go! | ||
+ | root.mainloop() | ||
+ | </ | ||
==== PyGObject ==== | ==== PyGObject ==== | ||
+ | |||
+ | **TL;DR**: Perhaps best option for Linux-centric apps---unless/ | ||
+ | |||
+ | Replacing PyGTK. | ||
+ | |||
Pros | Pros | ||
+ | * Workflow (UI layout to code) is pleasant. | ||
* First-class Linux framework. | * First-class Linux framework. | ||
* LGPL | * LGPL | ||
Line 20: | Line 85: | ||
* Poor support on other operating systems. | * Poor support on other operating systems. | ||
* GTK3 is the future and it is built for GNOME. For other desktop environments, | * GTK3 is the future and it is built for GNOME. For other desktop environments, | ||
+ | | ||
+ | ==== wxPython (including Phoenix)=== | ||
+ | <WRAP center round info 90%> | ||
+ | Perhaps best option for multi-platform proprietary apps that have zero budget. | ||
+ | </ | ||
- | |||
- | Thoughts | ||
- | * Workflow (UI layout to code) is pleasant. | ||
- | * Perhaps best option for Linux-centric apps---unless/ | ||
- | | ||
- | ==== wxPython (Phoenix)=== | ||
Pros | Pros | ||
* Liberal license. | * Liberal license. | ||
Line 33: | Line 97: | ||
Cons | Cons | ||
+ | * Support for Python 3 via Phoenix is still raw. | ||
* Second-class Linux framework. | * Second-class Linux framework. | ||
- | * Awkward external | + | * Wonky UI builder |
- | * wxFormBuilder generates .fbp files which are XML---but not really human readable. | + | * Requires third-party tools: |
- | * Tiny bit awkward | + | * wxFormBuilder |
+ | * wxGlade is incomplete. | ||
+ | * wxSmith is integrated with Code:: | ||
+ | * No UI file format results in slightly | ||
* Code seems awkward at times (perhaps it's only oddly named components) | * Code seems awkward at times (perhaps it's only oddly named components) | ||
- | + | ||
Awkward points: | Awkward points: | ||
* In wxville, a Frame is a window, a Window is the mega-parent class, a Control is a widget. | * In wxville, a Frame is a window, a Window is the mega-parent class, a Control is a widget. | ||
* Method names are CamelCase (first capitalized). | * Method names are CamelCase (first capitalized). | ||
* Events: self.Bind(// | * Events: self.Bind(// | ||
- | |||
- | Thoughts | ||
- | * Perhaps best option for universal proprietary apps that have zero budget. | ||
==== PyQt ==== | ==== PyQt ==== | ||
+ | |||
+ | **TL;DR**: Perhaps best option for multi-platform FOSS apps and for proprietary apps that have a $500 tools budget. | ||
+ | |||
Pros | Pros | ||
* First class Linux framework. | * First class Linux framework. | ||
Line 59: | Line 127: | ||
* Possibly PITA to install if not using distro repos (which you want because it moves so fast).((on Debian, '' | * Possibly PITA to install if not using distro repos (which you want because it moves so fast).((on Debian, '' | ||
- | Thoughts | + | ==== PySide ==== |
- | * Perhaps best option for universal FOSS apps and proprietary apps that have a $500 tooling budget. | + | |
+ | **TL;DR**: Abandonware? | ||
+ | |||
+ | Classic PySide was released in 2015 and works with Qt 4.8 framework. PySide2, which supports Qt5, is being developed, but it's not production ready, seems to be moving slowly, | ||
- | === Kivy === | + | ==== Kivy ==== |
- | Interesting, | + | **TL;DR**: Not really a desktop application framework. Well-suited to touch interfaces. |
Pros | Pros | ||
* MIT license. | * MIT license. | ||
- | === libavg === | + | ==== libavg |
Needs research | Needs research | ||
Line 74: | Line 145: | ||
* LGPL | * LGPL | ||
- | === PyGui === | + | ==== PyGui ==== |
Is a wrapper around desktop toolkits. On Linux, wraps PyGTK right now, PyGObject in the future. | Is a wrapper around desktop toolkits. On Linux, wraps PyGTK right now, PyGObject in the future. | ||
misc/gui_frameworks_for_linux.txt · Last modified: 2017/05/29 19:28 by mithat