EVENT-DRIVEN PROGRAMMING
โปรแกรมและอุปกรณ์ส่วนมากที่ใช้ใน ชีวิตประจำวัน จะตอบสนองกับเหตุการณ์ที่ เกิดขึ้น ตัวอย่างของเหตุการณ์ อาทิ การเคลื่อน หรือ คลิกเมาส์
Keypress Events
Press Up Key
Press Left Key
listen method We need the call to the window’s listen method, otherwise it won’t notice our keypresses. We named our handler functions h1, h2 and so on, but we can choose better names. The handlers can be arbitrarily complex functions that call other functions, etc
Pressing the q key on the keyboard calls function h4 (because we bound the q key to h4 ). While executing h4, the window’s bye method closes the turtle window, which causes the window’s mainloop call to end its execution.
We can refer to keys on the keyboard by their character code (as we did in the program), or by their symbolic names. Some of the symbolic names to try are Cancel, BackSpace, Tab, Enter, Shift, Control, Alt, Pause, Caps_Lock, Escape, Page Up, Page Down End, Home, Left, Up, Right, Down, Print, Insert, Delete, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, Num_Lock, and Scroll_Lock.
Mouse events A mouse event is a bit different from a keypress event because its handler needs two parameters to receive x,y coordinate information telling us where the mouse was when the event occurred.
There is a goto method, this allows us to move the turtle to an absolute coordinate position. (Most of the examples that we’ve seen so far move the turtle relative to where it currently is). So what this program does is move the turtle (and draw a line) to wherever the mouse is clicked. Try it out!
wn.title("Got click at coords {0}, {1}".format(x, y)) Because we can easily change the text in the window’s title bar, it is a useful place to display occasional debugging or status information. (Of course, this is not the real purpose of the window title!) But there is more!
Turtle handlers Not only can the window receive mouse events: individual turtles can also have their own handlers for mouse clicks. The turtle that “receives” the click event will be the one under the mouse. So we’ll create two turtles. Each will bind a handler to its own onclick event. And the two handlers can do different things for their turtles.
Automatic events from a timer Alarm clocks, kitchen timers, and thermonuclear bombs in James Bond movies are set to create an “automatic” event after a certain interval. The turtle module in Python has a timer that can cause an event when its time is up.
state machines A state machine is a system that can be in one of a few different states. We draw a state diagram to represent the machine, where each state is drawn as a circle or an ellipse. Certain events occur which cause the system to leave one state and transition into a different state. These state transitions are usually drawn as an arrow on the diagram.
State machines This idea is not new: when first turning on a cellphone, it goes into a state which we could call “Awaiting PIN”. When the correct PIN is entered, it transitions into a different state—say “Ready”. Then we could lock the phone, and it would enter a “Locked” state, and so on.
State machines A simple state machine that we encounter often is a traffic light. Here is a state diagram which shows that the machine continually cycles through three different states, which we’ve numbered 0, 1 and 2.
Traffic lights We’re going to build a program that uses a turtle to simulate the traffic lights. There are three lessons here. The first shows off some different ways to use our turtles. The second demonstrates how we would program a state machine in Python, by using a variable to keep track of the current state, and a number of different if statements to inspect the current state, and take the actions as we change to a different state. The third lesson is to use events from the keyboard to trigger the state changes.
A kind of state machine A traffic light is a kind of state machine with three states, Green, Orange, Red. We number these states 0, 1, 2 When the machine changes state, we change tess’ position and her fillcolor. This variable holds the current state of the machine state_num = 0
Press the Space bar key to change to a different state