computer science 112 fundamentals of programming ii user interfaces introduction to gui programming

31
Computer Science 112 Fundamentals of Programming II User Interfaces Introduction to GUI programming

Upload: devante-longest

Post on 28-Mar-2015

248 views

Category:

Documents


2 download

TRANSCRIPT

Page 1: Computer Science 112 Fundamentals of Programming II User Interfaces Introduction to GUI programming

Computer Science 112

Fundamentals of Programming IIUser Interfaces

Introduction to GUI programming

Page 2: Computer Science 112 Fundamentals of Programming II User Interfaces Introduction to GUI programming

What Is a User Interface?

• A set of hardware devices (touch screen, monitor, keyboard, mouse, microphone, speakers)

• Software (input/output functions)

• Allows human beings to use a computer effectively

UI

Inputs

OutputsComputation

Page 3: Computer Science 112 Fundamentals of Programming II User Interfaces Introduction to GUI programming

Types of User Interfaces

• ZUI (zoomable user interface)

• GUI (graphical user interface)

• TUI (terminal-based user interface)

UI

Inputs

OutputsComputation

Page 4: Computer Science 112 Fundamentals of Programming II User Interfaces Introduction to GUI programming

Terminal-Based User Interface (TUI)

import mathradius = float(input('Enter the radius: '))area = math.pi * radius ** 2print('The area is', area)

Supports input via the keyboard and output via the monitor

In Python, the I/O functions are input and print

Page 5: Computer Science 112 Fundamentals of Programming II User Interfaces Introduction to GUI programming

Terminal-Based User Interface (TUI)

import mathradius = float(input('Enter the radius: '))area = math.pi * radius ** 2print('The area is', area)

Supports input via the keyboard and output via the monitor

In Python, the I/O functions are input and print

Page 6: Computer Science 112 Fundamentals of Programming II User Interfaces Introduction to GUI programming

Problems with a TUI

• Must enter inputs in a certain order

• Cannot back up to correct input mistakes or change one’s mind

• Must re-enter all inputs to change just one

• I/O restricted to text

Page 7: Computer Science 112 Fundamentals of Programming II User Interfaces Introduction to GUI programming

Graphical User Interface (GUI)

• Supports input via the keyboard

• Can output text and also graphical shapes representing desktop elements, such as windows, command buttons, data fields, and drop-down menus (also called “widgets”)

• Supports direct manipulation of desktop elements via the mouse or touchscreen

Page 8: Computer Science 112 Fundamentals of Programming II User Interfaces Introduction to GUI programming

TUI vs GUI

Non-programmers (the 99%) do not use a TUI, they use a GUI

Only programmers (the 1%) use a TUI (and also a GUI)

Most beginning programmers program to a TUI, not a GUI

Page 9: Computer Science 112 Fundamentals of Programming II User Interfaces Introduction to GUI programming

Programming a GUI

• Most modern programming languages (like Python and Java) include packages or modules for programming a GUI

• In Python, this module is called tkinter

• The model of computation for a GUI program is more complex than that of a TUI program

Page 10: Computer Science 112 Fundamentals of Programming II User Interfaces Introduction to GUI programming

Models of Computation

TUI

1. Obtain user inputs

2. Perform computations

3. Print results

GUI

1. Layout and pop up the window

2. Wait for user events

3. Handle a user event

4. Goto step 2

Page 11: Computer Science 112 Fundamentals of Programming II User Interfaces Introduction to GUI programming

GUI Resources in Python

tkinterhttp://docs.python.org/py3k/library/tkinter.html#module-tkinter

breezypythonguihttp://home.wlu.edu/~lambertk/breezypythongui/index.html

Page 12: Computer Science 112 Fundamentals of Programming II User Interfaces Introduction to GUI programming

What Is breezypythongui?

• A module of classes and functions that makes GUI programming with tkinter easy for beginners

• The module is free and open-source

• A tutorial and sample programs are available at the breezypythongui Web site

Page 13: Computer Science 112 Fundamentals of Programming II User Interfaces Introduction to GUI programming

A First GUI Program: Hello World

from breezypythongui import EasyFrame

Import the abstract window class

Page 14: Computer Science 112 Fundamentals of Programming II User Interfaces Introduction to GUI programming

A First GUI Program: Hello World

from breezypythongui import EasyFrame

class HelloWorld(EasyFrame): """Displays a greeting in a window."""

Define a subclass to specialize it for this application

Page 15: Computer Science 112 Fundamentals of Programming II User Interfaces Introduction to GUI programming

A First GUI Program: Hello World

from breezypythongui import EasyFrame

class HelloWorld(EasyFrame): """Displays a greeting in a window."""

def __init__(self): """Sets up the window and the label.""" EasyFrame.__init__(self) self.addLabel(text = "Hello world!", row = 0, column = 0)

Lay out the window and its widgets

Page 16: Computer Science 112 Fundamentals of Programming II User Interfaces Introduction to GUI programming

A First GUI Program: Hello World

from breezypythongui import EasyFrame

class HelloWorld(EasyFrame): """Displays a greeting in a window."""

def __init__(self): """Sets up the window and the label.""" EasyFrame.__init__(self) self.addLabel(text = "Hello world!", row = 0, column = 0)

# Instantiates and pops up the window.if __name__ == "__main__": HelloWorld().mainloop()

Create and launch the application window

Page 17: Computer Science 112 Fundamentals of Programming II User Interfaces Introduction to GUI programming

The Structure of Any GUI Program

from breezypythongui import EasyFrame

class <class name>(EasyFrame):

def __init__(self): EasyFrame.__init__(self <optional args>) <code to set up widgets>

<code to define event-handling methods>

# Instantiates and pops up the window.if __name__ == "__main__": <class name>().mainloop()

Page 18: Computer Science 112 Fundamentals of Programming II User Interfaces Introduction to GUI programming

Laying Out Widgets

class LayoutDemo(EasyFrame): """Displays labels in the quadrants."""

def __init__(self): """Sets up the window and the labels.""" EasyFrame.__init__(self) self.addLabel(text = "(0, 0)", row = 0, column = 0) self.addLabel(text = "(0, 1)", row = 0, column = 1) self.addLabel(text = "(1, 0)", row = 1, column = 0) self.addLabel(text = "(1, 1)", row = 1, column = 1)

Page 19: Computer Science 112 Fundamentals of Programming II User Interfaces Introduction to GUI programming

Alignment and Spanning

def __init__(self): """Sets up the window and the labels.""" EasyFrame.__init__(self) self.addLabel(text = "(0, 0)", row = 0, column = 0, sticky = "NSEW") self.addLabel(text = "(0, 1)", row = 0, column = 1, sticky = "NSEW") self.addLabel(text = "(1, 0 and 1)", row = 1, column = 0, sticky = "NSEW", columnspan = 2)

Page 20: Computer Science 112 Fundamentals of Programming II User Interfaces Introduction to GUI programming

Window Attributes

• width (window shrink-wraps around widgets by default)

• height

• title (empty string by default)

• background (“white” by default)

• resizable (True by default)

Page 21: Computer Science 112 Fundamentals of Programming II User Interfaces Introduction to GUI programming

Arguments to __init__

def __init__(self): """Sets up the window.""" EasyFrame.__init__(self, title = "Blue Window", width = 200, height = 100, background = "blue", resizable = False)

Page 22: Computer Science 112 Fundamentals of Programming II User Interfaces Introduction to GUI programming

Method Calls on self (the Window)

def __init__(self): """Sets up the window.""" EasyFrame.__init__(self) self.setTitle("Blue Window") self.setSize(200, 100) self.setBackground("blue") self.setResizable(False)

Page 23: Computer Science 112 Fundamentals of Programming II User Interfaces Introduction to GUI programming

Set the Window’s Attribute Dictionary

def __init__(self): """Sets up the window.""" EasyFrame.__init__(self) self["title"] = "Blue Window" self.setSize(200, 100) self["background"] = "blue" self.setResizable(False)

Page 24: Computer Science 112 Fundamentals of Programming II User Interfaces Introduction to GUI programming

The Label Widget and Its Attributes

• The breezypythongui method addLabel– creates an object of type tkinter.Label with the

given attributes (text and position are required)

– places it in the window’s grid at the given position

– returns the label object

• The label’s attributes can then be accessed or modified by accessing its attribute dictionary

Page 25: Computer Science 112 Fundamentals of Programming II User Interfaces Introduction to GUI programming

The Label Widget and Its Attributes

• font (a tkinter.font.Font object)

• background (the color of the rectangular area surrounding the label)

• foreground (the text color)

• text (the label’s text)

• image (a tkinter.PhotoImage object)

Page 26: Computer Science 112 Fundamentals of Programming II User Interfaces Introduction to GUI programming

A Captioned Image

Page 27: Computer Science 112 Fundamentals of Programming II User Interfaces Introduction to GUI programming

A Captioned Imagefrom breezypythongui import EasyFramefrom tkinter import PhotoImagefrom tkinter.font import Font

Page 28: Computer Science 112 Fundamentals of Programming II User Interfaces Introduction to GUI programming

A Captioned Imagefrom breezypythongui import EasyFramefrom tkinter import PhotoImagefrom tkinter.font import Font

class ImageDemo(EasyFrame): """Displays an image and a caption."""

def __init__(self): """Sets up the window and widgets.""" EasyFrame.__init__(self, title = "Image Demo", resizable = False) imageLabel = self.addLabel(text = "", row = 0, column = 0, sticky = "NSEW") textLabel = self.addLabel(text = "Smokey the cat", row = 1, column = 0, sticky = "NSEW")

Page 29: Computer Science 112 Fundamentals of Programming II User Interfaces Introduction to GUI programming

A Captioned Imagefrom breezypythongui import EasyFramefrom tkinter import PhotoImagefrom tkinter.font import Font

class ImageDemo(EasyFrame): """Displays an image and a caption."""

def __init__(self): """Sets up the window and widgets.""" EasyFrame.__init__(self, title = "Image Demo", resizable = False) imageLabel = self.addLabel(text = "", row = 0, column = 0, sticky = "NSEW") textLabel = self.addLabel(text = "Smokey the cat", row = 1, column = 0, sticky = "NSEW") # Load the image and associate it with the image label. self.image = PhotoImage(file = "smokey.gif") imageLabel["image"] = self.image

Page 30: Computer Science 112 Fundamentals of Programming II User Interfaces Introduction to GUI programming

A Captioned Imagefrom breezypythongui import EasyFramefrom tkinter import PhotoImagefrom tkinter.font import Font

class ImageDemo(EasyFrame): """Displays an image and a caption."""

def __init__(self): """Sets up the window and widgets.""" EasyFrame.__init__(self, title = "Image Demo", resizable = False) imageLabel = self.addLabel(text = "", row = 0, column = 0, sticky = "NSEW") textLabel = self.addLabel(text = "Smokey the cat", row = 1, column = 0, sticky = "NSEW") # Load the image and associate it with the image label. self.image = PhotoImage(file = "smokey.gif") imageLabel["image"] = self.image

# Set the font and color of the caption. font = Font(family = "Verdana", size = 20, slant = "italic") textLabel["font"] = font textLabel["foreground"] = "blue"

Page 31: Computer Science 112 Fundamentals of Programming II User Interfaces Introduction to GUI programming

For Next Time

• Command buttons

• Responding to user events