Page 222 - Em Học Python
P. 222

TẠO CÁC TƯƠNG TÁC



                       Ta có thể làm cho hình tam giác này tương tác lại khi có người nhấn nút trên bàn

                                                               ​
               phím bằng các  liên kết sự kiện  ⟨event binding⟩. Sự kiện  ⟨event⟩ là những thứ xảy ra trong lúc
                                                                              ​
                                                              ​
               một chương đang chạy, như là chuột di chuyển, bàn phím được nhấn, hoặc là cửa sổ bị
               đóng lại. Em có thể bảo  tkinter theo dõi những sự kiện này và làm gì đó mỗi khi sự kiện
                                                ​
               xảy ra.


                       Để xử lý sự kiện (tức là bảo Python làm gì đó mỗi khi một sự kiện xảy ra), ta đầu tiên

               cần phải tạo hàm. Phần liên kết xảy ra khi ta bảo  tkinter rằng hàm này bị  ràng buộc
                                                                          ​
               ⟨bound⟩ (hay còn gọi là  gắn  ⟨associate⟩ ) với một sự kiện cụ thể nào đó; nói cách khác,
                       ​
                                                      ​
               tkinter sẽ tự động gọi hàm để xử lý sự kiện xảy ra.
                        ​

                       Ví dụ, để hình tam giác của chúng ta di chuyển mỗi khi nhấn bàn phím, ta có thể

               viết hàm như sau:


               def movetriangle(event):
                   ​
                                   ​
                    ​
                   canvas.move(1, 5, 0)
                       Hàm này chỉ nhận một tham số duy nhất là  event, là cái mà tkinter sẽ sử dụng để
                                                                                     ​
                                                                                             ​
                                                                          ​
               đưa thông tin về sự kiện vào trong hàm. Sau đó ta bảo  tkinter hàm này sẽ được dùng cho
                                                                               ​
               một sự kiện cụ thể, bằng cách dùng hàm  bind_all trên bảng vẽ. Code hoàn chỉnh trông
                                                                   ​
               như thế này:


               from tkinter import *
                               ​
                                      ​
                    ​
               tk = Tk()
               canvas = Canvas(tk, width=400, height=400)
               canvas.pack()
               canvas.create_polygon(10, 10, 10, 60, 50, 35)
               def movetriangle(event):
                    ​
                   ​
                                   ​
                   canvas.move(1, 5, 0)
               canvas.bind_all('<KeyPress-Return>', movetriangle)
                                   ​
                                                         ​
                       Tham số đầu tiên của hàm là sự kiện mà ta muốn  tkinter theo dõi. Trong trường
                                                                                  ​
               hợp này là  <KeyPress-Return>, tức là lúc ta nhấn nút  ENTER hoặc  RETURN. Ta nói với
                                               ​
                                                                             ​
                                                                                            ​
               tkinter rằng ta muốn hàm  movetriangle sẽ được gọi mỗi khi sự kiện  KeyPress xảy ra.
                                                          ​
                        ​
                                                                                                 ​
               196          Chương 12
                   ​
   217   218   219   220   221   222   223   224   225   226   227