Boston Python workshop/Saturday/ColorWall: Difference between revisions

From OpenHatch wiki
Content added Content deleted
imported>Paulproteus
 
imported>Jesstess
No edit summary
Line 1: Line 1:
== Project ==
#REDIRECT [[Boston Python Workshop/Saturday/ColorWall]]

Program graphical effects for a ColorWall using the Tkinter GUI toolkit.

== Goals ==

* Have fun experiment with and creating graphical effects.
* Practice using functions and classes.
* Get experience with graphics programming using the Tkinter GUI toolkit.

== Project setup ==

=== Download and un-archive the ColorWall project skeleton code ===

* http://web.mit.edu/jesstess/www/BostonPythonWorkshop6/ColorWall.zip

Un-archiving will produce a <code>ColorWall</code> folder containing several Python files, including: run.py, effects.py, and advanced_effects.py.

=== Test your setup ===

From a command prompt, navigate to the <code>ColorWall</code> directory and run

<pre>python run.py -a</pre>

You should see a window pop up and start cycling through colorful effects. If you don't, let a staff member know so you can debug this together.

== Project steps ==

=== 1. Learn about HSV values ===

Run the ColorWall effects again with

<pre>python run.py -a</pre>

The names of the effects are printed to the terminal as they are run. Pay particular attention to the first 4 effects:
* SolidColorTest
* HueTest
* SaturationTest
* ValueTest

What are the differences between these tests? Given these difference and how they are expressed visually, how does varying hue, saturation, or value change a color?

=== 2. Examine <code>Effect</code> and the interface its subclasses provide ===

All of the effects inherit from the <code>Effect</code> class. Examine this class and its <code>__init__</code> and <code>run</code> methods.


==Suggested exercises==

<ul>
<li>
Find and change the colors used in the <code>Checkerboards</code> effect, and re-run the effect:

<pre>
python run.py Checkerboards
</pre>

Then change the line

<pre>
if (x + y + i) % 2 == 0:
</pre>

to

<pre>
if (x + y + i) % 3 == 0:
</pre>

re-run the effect, and see what changed.
</li>
<li>
Find and change the color of the columns in the <code>Matrix</code> effect, and re-run the effect:

<pre>
python run.py Matrix
</pre>

Each column that we see on the wall corresponds to a <code>Column</code> object. Add some randomness to the color used by each column (the variable whose value you changed above) using the <code>random.random</code> function, re-run the effect, and see what happens.
</li>
<li>
Walk through <code>Twinkle</code>. Find explanations of the <code>random.randint</code> and <code>random.uniform</code> functions in the online documentation at

http://docs.python.org/library/random.html.

Experiment with these functions at a Python prompt:

<pre>
import random
random.randint(0, 1)
random.randint(0, 5)
random.uniform(-1, 1)
</pre>

Then experiment with the numbers that make up the hue and re-run the effect:

<pre>
python run.py Twinkle
</pre>
</li>
<li>
Write your own effects!
</li>
</ul>

==Some Useful Links==

If you choose to use HSV colors you define instead of the dictionary, you may find some of the following useful:
* [http://www.yafla.com/yaflaColor/ColorRGBHSL.aspx A graphical HSV color picking website]
* [http://en.wikipedia.org/wiki/HSL_and_HSV HSV on Wikipedia]
* [http://docs.python.org/library/random.html Python random library]
* [http://docs.python.org/library/time.html Python time library]

[[Boston Python workshop 2/Saturday projects|&laquo; Back to the Saturday project page]]

Revision as of 02:02, 5 July 2012

Project

Program graphical effects for a ColorWall using the Tkinter GUI toolkit.

Goals

  • Have fun experiment with and creating graphical effects.
  • Practice using functions and classes.
  • Get experience with graphics programming using the Tkinter GUI toolkit.

Project setup

Download and un-archive the ColorWall project skeleton code

Un-archiving will produce a ColorWall folder containing several Python files, including: run.py, effects.py, and advanced_effects.py.

Test your setup

From a command prompt, navigate to the ColorWall directory and run

python run.py -a
You should see a window pop up and start cycling through colorful effects. If you don't, let a staff member know so you can debug this together.

Project steps

1. Learn about HSV values

Run the ColorWall effects again with

python run.py -a

The names of the effects are printed to the terminal as they are run. Pay particular attention to the first 4 effects:

  • SolidColorTest
  • HueTest
  • SaturationTest
  • ValueTest

What are the differences between these tests? Given these difference and how they are expressed visually, how does varying hue, saturation, or value change a color?

2. Examine Effect and the interface its subclasses provide

All of the effects inherit from the Effect class. Examine this class and its __init__ and run methods.


Suggested exercises

  • Find and change the colors used in the Checkerboards effect, and re-run the effect:
    python run.py Checkerboards
    

    Then change the line

        if (x + y + i) % 2 == 0:
    

    to

        if (x + y + i) % 3 == 0:
    

    re-run the effect, and see what changed.

  • Find and change the color of the columns in the Matrix effect, and re-run the effect:
    python run.py Matrix
    

    Each column that we see on the wall corresponds to a Column object. Add some randomness to the color used by each column (the variable whose value you changed above) using the random.random function, re-run the effect, and see what happens.

  • Walk through Twinkle. Find explanations of the random.randint and random.uniform functions in the online documentation at http://docs.python.org/library/random.html. Experiment with these functions at a Python prompt:
    import random
    random.randint(0, 1)
    random.randint(0, 5)
    random.uniform(-1, 1)
    

    Then experiment with the numbers that make up the hue and re-run the effect:

    python run.py Twinkle
    
  • Write your own effects!

Some Useful Links

If you choose to use HSV colors you define instead of the dictionary, you may find some of the following useful:

« Back to the Saturday project page