Con trăn rùa onkey

文章目录

Python中的turtle. onkey()函数

turtle模块以面向对象和面向过程的方式提供Turtle图形基元。因为它使用 Tkinter 作为底层图形,它需要安装一个支持 Tk 的 Python 版本。

con rùa. onkey()

这个函数用于将乐趣与键的释放事件绑定。为了能够注册按键事件,TurtleScreen必须有焦点。

语法

turtle.onkey(fun, key)

参数

参数描述fun一个没有参数的函数key一个字符串:键(如 “a”)或键符号(如 “空格”)。

下面是上述方法的实现和一些例子。

例子1

# import package import turtle    # method for key call def fxn():     turtle.forward(40)    # set turtle screen size sc=turtle.Screen() sc.setup(600,300)    # motion turtle.forward(40)    # call method on Right key turtle.onkey(fxn,'Right')    # to listen by the turtle turtle.listen()

输出

例子2

# import package import turtle    # methods with different work  # at different keys def fxn():     turtle.forward(20)        def fxn1():     turtle.right(90)    def fxn2():     turtle.left(90)      # set screen size sc=turtle.Screen() sc.setup(500,300)    # call methods turtle.onkey(fxn,'space') turtle.onkey(fxn1,'Right') turtle.onkey(fxn2,'Left')    # to listen by the turtle turtle.listen()

输出

Mô-đun rùa của Python là một công cụ tuyệt vời để sử dụng cho việc dạy viết mã. Một trong những chức năng chính được sử dụng khi tạo hoạt ảnh hoặc trò chơi tương tác là cho phép liên kết một lần nhấn phím với một chức năng


Nếu bạn đã dành đủ thời gian chơi với mô-đun này, có lẽ bạn đã đặt ra câu hỏi sau. Làm cách nào để chuyển thông tin về phím nào đã được nhấn cho chức năng đang được gọi khi nhấn phím?


Đây là cách onkeypress() được sử dụng.


import turtle window = turtle.Screen() fred = turtle.Turtle() def draw_square(): for _ in range(4): fred.forward(100) fred.left(90) window.onkeypress(draw_square, 'space') window.listen() turtle.done()

Bạn đã tạo một phiên bản của các đối tượng Screen() và Turtle(), xác định một hàm vẽ hình vuông và sau đó sử dụng onkeypress() to bind the space bar key to this function.


Vì vậy, khi bạn chạy chương trình và nhấn dấu cách, con rùa sẽ vẽ một hình vuông


Điều gì sẽ xảy ra nếu bạn muốn vẽ một đa giác với bất kỳ số cạnh nào. Hãy giới hạn số cạnh tối đa là chín cho ví dụ này


Có thể thay đổi hàm draw_square() thành draw_polygon(n_sides):

def draw_polygon(n_sides): for _ in range(n_sides): fred.forward(400 / n_sides) fred.left(360 / n_sides)

Điều bạn muốn có thể làm bây giờ là liên kết phím '5' trên bàn phím với

draw_polygon(5) và khóa '7' với draw_polygon(7) và cứ tiếp tục như vậy.


Ngoại trừ việc bạn không thể


Hàm bạn sử dụng trong lệnh gọi onkeypress() không thể nhận bất kỳ đối số đầu vào nào. Nói cách khác, phím được sử dụng trong onkeypress() sẽ kích hoạt chức năng, nhưng thông tin về phím nào đã được nhấn sẽ bị mất và không thể .


Tất nhiên chúng ta có thể tạo nhiều hàm và tổ hợp phím khác nhau, ví dụ: hàm có tên draw_triangle() được liên kết với phím '3' . Nhưng cuộc sống quá ngắn ngủi và chúng ta không thích những khuôn mẫu lặp đi lặp lại này khi viết mã. draw_square() bound to '4' and so on. But life's too short and we don't like these repetitive patterns when we code.


Vì vậy, hãy khắc phục điều này. Phải có hack mới khắc phục được hạn chế này


Hãy quay trở lại thực tế là hàm được sử dụng trong lệnh gọi onkeypress() không thể có bất kỳ đối số đầu vào nào. Chúng tôi không thể ghi cửa sổ. onkeypress(draw_polygon(4), '4') vì điều này sẽ chỉ chạy hàm draw_polygon(4) khi . Trong trường hợp này, hàm trả về onkeypress() function is executed, drawing the square right away, and then bind whatever is returned by the function to the key '4'. In this case the function returns Không có nên sẽ không có gì xảy ra khi nhấn phím '4'.


Điều này có nghĩa là hàm được sử dụng làm đối số đầu tiên của onkeypress() phải được xác định mà không có bất kỳ tham số đầu vào nào, phải không?

Chủ đề