The Model - View - Controller approach to application design keeps the Graphic User Interface (the view) separate from the database (the model), with the controller in between the two, describing how the data is displayed, and how changes to the data are saved away in the database. By separating the elements in this way, extra displays can be added and removed, and the look and feel can be changed, without effecting the underlying data structure. And algorithms that deal with the data can be amended (and re-used away from the GUI) without effecting the GUIs.
It's a grand theory ... but do I have a small, practical first example in [LANGUAGE] using the [GUINAME] GUI and the [DATABASE] database? That's a question I'm often asked ... and today I put together such an example where the answers were:
• Python 3 for the language
• Qt4 (via PyQt) for the GUI
• SQlite for the database.

This is what the application looks like when it's run - the view. It's displaying the list of hotel names from the database - the model - through a piece of logic which extracts each hotel via a hotel object and converts it into the string to be displayed - the controller.

There are four files in the main application - there's
[model.py] which fetches all the hotel objects from the SQlite database. There's
[tourist.py] which defines the hotel objects in the model. There's the controller which generates the list for display at
[accomlist.py], and there's the view which is at
[ticfull.py].
You'll find two more files associated with this demonstration - there's a second (simpler) view to illustrate how it broadens out to show the model in different ways - that's at
[tic_view.py] and there's
[sqlite.py] which is a separate program to populate the database.
(written 2010-04-29)
2dba
Associated topics are indexed under
Q910 - Object Orientation and General technical topics - GUI principles [3081] wxPython - simple example to add GUI to a server log file analysis - (2010-12-08)
Y115 - Additional Python Facilities [4085] JSON from Python - first principles, easy example - (2013-05-13)
[3469] Teaching dilemma - old tricks and techniques, or recent enhancements? - (2011-10-08)
[3442] A demonstration of how many Python facilities work together - (2011-09-16)
[3089] Python regular expressions - repeating, splitting, lookahead and lookbehind - (2010-12-17)
[2790] Joining a MySQL table from within a Python program - (2010-06-02)
[2786] Factory methods and SqLite in use in a Python teaching example - (2010-05-29)
[2765] Running operating system commands from your Python program - (2010-05-14)
[2764] Python decorators - your own, staticmethod and classmethod - (2010-05-14)
[2745] Connecting Python to sqlite and MySQL databases - (2010-04-28)
[2721] Regular Expressions in Python - (2010-04-14)
[2655] Python - what is going on around me? - (2010-02-28)
[2462] Python - how it saves on compile time - (2009-10-20)
[2435] Serialization - storing and reloading objects - (2009-10-04)
[2407] Testing code in Python - doctest, unittest and others - (2009-09-16)
[1876] Python Regular Expressions - (2008-11-08)
[1337] A series of tyre damages - (2007-09-08)
[1336] Ignore case in Regular Expression - (2007-09-08)
[1305] Regular expressions made easy - building from components - (2007-08-16)
[1149] Turning objects into something you can store - Pickling (Python) - (2007-04-15)
[1136] Buffering output - why it is done and issues raised in Tcl, Perl, Python and PHP - (2007-04-06)
[1043] Sending an email from Python - (2007-01-18)
[901] Python - listing out the contents of all variables - (2006-10-21)
[753] Python 3000 - the next generation - (2006-06-09)
[672] Keeping your regular expressions simple - (2006-04-05)
[663] Python to MySQL - (2006-03-31)
[463] Splitting the difference - (2005-10-13)
[239] What and why for the epoch - (2005-03-08)
[208] Examples - Gadfly, NI Number, and Tcl to C interface - (2005-02-10)
[183] The elegance of Python - (2005-01-19)
S200 - MySQL - SQLite [4024] SQL databases from Python - an SQLite example - (2013-03-02)
[4007] Which database should I use? MySQL v SQLite - (2013-02-16)
[4006] Ruby / SQLite3 example program, showing JOIN v LEFT JOIN - (2013-02-16)
[3269] Files or Databases? MySQL, SQLite, or Oracle? - (2011-04-28)
[3139] Steering our Python courses towards wxPython, SQLite and Django - (2011-01-19)
[3099] Perl - database access - DBD, DBI and DBIx modules - (2010-12-22)
[2744] PyQt (Python and Qt) and wxPython - GUI comparison - (2010-04-28)
[2561] The future of MySQL - (2010-01-03)
Y113 - Python and SQL databases [4086] Cacheing class for Python - using a local SQLite database as a key/value store - (2013-05-14)
[3136] A framework with python - Django - first steps - (2011-01-17)
Y206 - Python and the Qt GUI [1036] Python Qt, wX, TkInter, and Jython - training?? - (2007-01-16)
Some other Articles
Views of WessexDelegate Question - defining MySQL table relationships as you create the tablesMonitoring the success and traffic of your web siteContainment, Associative Objects, Inheritance, packages and modulesModel - View - Controller demo, Sqlite - Python 3 - Qt4Public Open Source Training Courses running this summer and autumn in MelkshamA simple server benchmark scriptWhat is a factory?