28f4 Model - View - Controller demo, Sqlite - Python 3 - Qt4
Home Accessibility Courses Diary The Mouth Forum Resources Site Map About Us Contact
Model - View - Controller demo, Sqlite - Python 3 - Qt4

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.

Python, Qt demo - what the GUI looks likeThis 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.


Model - view controller layoutThere 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)


Back to
Connecting Python to sqlite and MySQL databases
Previous and next
or
Horse's mouth home
Forward to
Containment, Associative Objects, Inheritance, packages and modules
Some other Articles
Views of Wessex
Delegate Question - defining MySQL table relationships as you create the tables
Monitoring the success and traffic of your web site
Containment, Associative Objects, Inheritance, packages and modules
Model - View - Controller demo, Sqlite - Python 3 - Qt4
Public Open Source Training Courses running this summer and autumn in Melksham
A simple server benchmark script
What is a factory?
4083 posts, page by page
Link to page ... 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82 at 50 posts per page

4512
This is a page archived from The Horse's Mouth at http://www.wellho.net/horse/ - the diary and writings of Graham Ellis. Every attempt was made to provide current information at the time the page was written, but things do move forward in our business - new software releases, price changes, new techniques. Please check back via our main site for current courses, prices, versions, etc - any mention of a price in "The Horse's Mouth" cannot be taken as an offer to supply at that price.

Link to Ezine home page (for reading).
Link to Blogging home page (to add comments).

You can Add a comment or ranking to this page

© WELL HOUSE CONSULTANTS LTD., 2013: Well House Manor • 48 Spa Road • Melksham, Wiltshire • United Kingdom • SN12 7NY
PH: 01144 1225 708225 • FAX: 01144 1225 899360 • EMAIL: info@wellho.net • WEB: http://www.wellho.net • SKYPE: wellho

PAGE: http://www.wellho.net/mouth/2746_Mod ... 3-Qt4.html • PAGE BUILT: Sat Feb 23 12:39:13 2013 • BUILD SYSTEM: wizard
0