# Applied Programming/GUI

This lesson provides a brief introduction to graphic user interface (GUI) programming. GUI options include native frameworks, cross-platform frameworks, and web applications.

## Objectives and Skills

Objectives and skills for this lesson include:
* Understand the options available for GUI application development
* Implement a simple GUI application

## Readings

* Wikipedia: Graphical user interface
* Wikipedia: List of widget toolkits

## Multimedia

* YouTube: How to Program a GUI Application
* YouTube: GUI Tkinter Introduction
* YouTube: Python GUI Frameworks

## Examples

* Python3
* Python3-PyQt
* Python3-tkInter
* Python3/flask

## Activities
### GUI Applications

* Using the default GUI framework for your selected programming language, create a graphical user interface for one of the programs developed in this course.

## Lesson Summary

* A GUI is a graphical user interface, where actions get funneled through widgets, as opposed to a CLI, a command line interface—where the program is composed exclusively of text.
** A widget is an element of user-computer interaction that facilitates the direct manipulation of the program by the user (through events).
* Python's Tkinter library is a binding to the Tk GUI toolkit, which is a framework written in C.
* A language binding is an API (application programming interface) that allows one language to interface with the code of another language.
** Glue code is a name for this code written solely to inter-operate between libraries, providing no other useful functionality.
** An API is a means to communicate between two or more components of software.
* GUIs are used in a variety of handheld devices like our smartphones, media players, and even in computerized control systems. It aims to enhance efficiency and usability of a program within these devices by allowing users to choose from elements such as windows, menus, and icons.
** Operating systems still provide some sort of command-line interface along GUI, allowing it to be used easily for beginners. Although CLI may not be preferred, it still does offer greater efficiency and productivity, especially in complex operations, as long as the commands are known by the user. Also, command-line interfaces do not need as much storage and processing power when compared to GUI.
* Large widgets, such as windows, usually provide a frame or container for the main presentation content such as a web page, email message or drawing. Smaller ones usually act as a user-input tool.
* The visible graphical interface features of an application are sometimes referred to as chrome or GUI (pronounced gooey). Typically, users interact with information by manipulating visual widgets that allow for interactions appropriate to the kind of data they hold.
* Most modern operating systems provide both a GUI and some level of a CLI, although the GUIs usually receive more attention.
* A GUI uses a combination of technologies and devices to provide a platform that users can interact with, for the tasks of gathering and producing information.
* Good user interface design relates to users more, and to system architecture less.
* Designing the visual composition and temporal behavior of a GUI is an important part of software application programming in the area of human–computer interaction. Its goal is to enhance the efficiency and ease of use for the underlying logical design of a stored program, a design discipline named usability.
* Operating systems often have low level widget toolkits integrated within them. Some examples of these are:
** OS X uses Cocoa. Mac OS9 and OS X use Carbon for 32-bit applications.
** The Windows API used in Microsoft Windows. Microsoft had the graphics functions integrated in the kernel until 2006.

## Key Terms
### API

    An API is a means to communicate between two or more components of software. API interfaces make it easier for developers to use certain technologies in building applications.

### CLI

    Command-line interface, the program is composed purely of textual content.

### Client

    A piece of computer hardware or software that accesses a service made available by a server. Web application clients vary greatly and this warrants extended forms of testing.

### GUI

    Graphical user interface, the program is composed of interactive widgets.

### GUI wrapper

    Graphical user interface wrappers circumvent the command-line interface versions of (typically) Linux and Unix-like software applications. Applications may also provide both interfaces, and when they do the GUI is usually a WIMP wrapper around the command-line version.

### integration testing

    A phase in software testing in which individual software modules are combined and tested as a group.

### post-WIMP interface

    As of 2011, some touchscreen-based operating systems such as Apple's iOS and Android use the class of GUIs named post-WIMP. These support styles of interaction using more than one finger in contact with a display, which allows actions such as pinching and rotating, which are unsupported by one pointer and mouse.

### skin

    Refers to the appearance of a program's interface.

### system testing

    Testing conducted on a complete, integrated system to evaluate the system's compliance with its specified requirements.

### unit testing

    A phase of software testing where individual units of a software are tested to determine whether they are fit for use.

### widget

    A vessel for human-computer interaction that is characteristic of a GUI;a widget could be a button, a check box, a text box, etc.

### WIMP

    Stands for "Windows, Icons, Menus, Pointer." which describes the graphical user interface (GUI) of personal computers.

### window

    A graphical control element which consists of a visual area containing some of the graphical user interface of the program it belongs to and is framed by window decoration.

### Workbench

    provides the user with a graphical interface to work with file systems and launch applications. It uses a workbench metaphor (in place of the more common desktop metaphor) for representing file system organisation.

### web framework

    A structure support of web applications, libraries, APIs, and compilers to streamline the creation of new software.

### web application

    A client-server program that runs in a web browser.

### web application development

    The process and practice of developing web applications.

## See Also

* Internet Fundamentals
* https://www.geeksforgeeks.org/python-gui-tkinter/
* HTML
* TutorialsPoint: Tkinter Tutorial
* Web Designer Depot - Operating System Interface Design Between 1981-2009
* HubSpot - A Look Back at 20+ Years of Website Design
* Wayback Machine