# Object-Oriented Programming/GUI Applications

This lesson introduces GUI applications.

## Objectives and Skills

Objectives and skills for this lesson include:
* Develop project management skills to achieve a project goal within given constraints.
** Initiating, planning, executing, controlling, and closing the work of a team.
** Design a Gantt chart to illustrate the project's schedule
* Design a object-oriented GUI program
** Create a UML class diagram that characterizes the implementation details of the program (classes, methods, attributes, and their relationships)

## Readings

* Wikiversity: Project Management
* Wikipedia: Graphical user interface
* Wikipedia: List of widget toolkits
* https://python-course.eu/tkinter/

## Examples

* Hello World
* Text
* Menus
* Custom Dialog
* Canvas

## Activities
### Hello World

* Review Wikipedia: "Hello, World!" program.
* Create a GUI program that displays "Hello, World!"

### Text Editor

* Review Wikipedia: Text editor
* Create a GUI program that implements a text editor.
* Add a File menu with options for New and Exit.
* Add an Edit menu with options to Cut, Copy, and Paste. Include keyboard shortcuts for ^X, ^C, and ^V.
* Add a context menu that allows the user to right-click in the text window and select Cut, Copy, and Paste options.
* Update the File menu with options for Open..., Save, and Save As... Use standard dialog boxes to implement these menu options.
* Add a Format menu with options for Font... Use a standard dialog box to implement this menu option.
* Add a Help menu with a custom About dialog box.

### Raster Graphics Editor

* Review Wikipedia: Raster graphics editor
* Create an object-oriented GUI program that implements a raster graphics editor (paint program). Include a canvas drawing surface and a variety of drawing options, such as different colors and brush sizes, a text tool, etc.
* Add a File menu with options for New, and Exit.
* Update the File menu with options for Open..., Save, and Save As... Use standard dialog boxes to implement these menu options.
* Add a Help menu with a custom About dialog box.

### Card Game
#### Create a GUI Application

* Review Stanford: The Card Game Assignment. Create an object-oriented GUI program that implements a card deck application.
* Include program, class, and method documentation consistent with the documentation standards for your selected programming language.
* Add unit testing to test all aspects of each class. Run tests automatically when the class module itself is run as the main program.

#### Add Lists

* Enhance the card game program above to use lists to implement decks, hands, and players.
* Add rules to the card game so users may play one of the following:
** Black Jack
** Crazy Eights
** Go Fish
** Old Maid
** Rummy
** War
* Include program, class, and method documentation consistent with the documentation standards for your selected programming language.
* Add unit testing to test all aspects of each class. Run tests automatically when the class module itself is run as the main program.

#### Add Dictionaries

* Enhance the card game program above to use dictionaries to implement scoring (tracking player wins and losses).
* Include program, class, and method documentation consistent with the documentation standards for your selected programming language.
* Add unit testing to test all aspects of each class. Run tests automatically when the class module itself is run as the main program.

### Weather Application
#### Create a GUI Application

* Review OpenWeatherMap: API. Create an object-oriented GUI program that displays current weather for a given location entered or selected by the user.# Include program, class, and method documentation consistent with the documentation standards for your selected programming language.
* Add unit testing to test all aspects of each class. Run tests automatically when the class module itself is run as the main program.

#### Add Lists

* Enhance the weather application above to use lists to add hourly and daily weather forecasts for the given location.
* Include program, class, and method documentation consistent with the documentation standards for your selected programming language.
* Add unit testing to test all aspects of each class. Run tests automatically when the class module itself is run as the main program.

#### Add Dictionaries

* Enhance the weather application above to use dictionaries to track multiple locations entered or selected by the user. Track usage history and display location options in order by most recently used.
* Include program, class, and method documentation consistent with the documentation standards for your selected programming language.
* Add unit testing to test all aspects of each class. Run tests automatically when the class module itself is run as the main program.

## See Also

* Applied Programming/Lists and Tuples
* Applied Programming/Dictionaries and Sets
* Read The Docs: Introduction to GUI Programming
* Stanford: The Card Game Assignment