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()

输出

Con trăn rùa onkey

例子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()

输出

Con trăn rùa onkey

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?


Không hẳn, không


Chúng ta hãy xem sửa đổi sau đây

window.onkeypress(lambda n=4: draw_polygon(n), '4')

Chúng tôi hiện đang sử dụng hàm lambda ẩn danh làm tham số đầu tiên trong onkeypress()< . Tuy nhiên, chúng tôi đã xác định hàm lambda để tham số đầu vào của chính nó, . However we have defined the lambda function so that its own input parameter, n , có giá trị mặc định. Điều này có nghĩa là hàm có thể được gọi mà không cần đối số đầu vào, theo yêu cầu của bất kỳ hàm nào được sử dụng trong onkeypress() .


Điều này có nghĩa là khi nhấn phím '4', hàm lambda được gọi mà không có đối số đầu vào, nhưng dưới dạng n defaults to 4, then draw_polygon(4) is called, and we have a square.


Tại sao điều này hữu ích?


import turtle

window = turtle.Screen()
fred = turtle.Turtle()

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

for n in range(3, 10):
    window.onkeypress(lambda n=n: draw_polygon(n), str(n))

window.listen()

turtle.done()

Các phím '3' đến '9' hiện đã được liên kết với các hàm lambda sẽ trả về draw_polygon() function with the required input argument. Press '3' and you get a triangle, press '5' and you get a pentagon, and so on.


Chúng tôi đã quản lý để chuyển thông tin về phím nào đã được nhấn tới chức năng mà chúng tôi muốn thực hiện


Sửa (17/04/21). Một cách khác để sử dụng hàm lambda do Mike Driscoll đề xuất là sử dụng functools. partial cho phép bạn tạo một phiên bản của hàm với một số đối số đầu vào được chỉ định trước. Sau khi nhập funcools , bạn có thể thay thế dòng trong đó các liên kết chính đang được thực hiện bằng.


window.onkeypress(functools.partial(draw_polygon, n_sides=n),
                  str(n),
                  )


 


Và đây là một ví dụ khác để mô phỏng máy đánh chữ sử dụng rùa


________số 8_______

Vì vậy, nếu bạn thấy mình viết nhiều hàm lặp đi lặp lại và liên kết từng hàm với một phím khác trên bàn phím, hãy kiểm tra xem lambda function can come to the rescue!


Rất thích điều này và muốn học thêm Python miễn phí?


Tại codetoday, chúng tôi dạy trẻ em viết mã bằng Python từ cơ bản đến nâng cao. Tìm hiểu thêm về các khóa học của chúng tôi

Rùa Onkey là gì?

onkey() Hàm này được sử dụng để liên kết niềm vui với sự kiện giải phóng khóa của khóa . Để có thể đăng ký các sự kiện chính, TurtleScreen phải có tiêu điểm.

Làm cách nào để phát hiện phím bấm trong trăn rùa?

Mô-đun rùa cho phép chúng tôi phát hiện khi người dùng nhấn một số phím nhất định trên bàn phím hoặc di chuyển/nhấp chuột . Bất cứ khi nào người dùng thực hiện một hành động như vậy, nó được gọi là một sự kiện. Chúng ta có thể lắng nghe các sự kiện và kích hoạt các chức năng để chạy nếu chúng ta "nghe thấy" sự kiện.

sự kiện bàn phím trong python rùa là gì?

Những hành động như vậy được thực hiện khi nhấp chuột hoặc nhấn các phím trên bàn phím được gọi là sự kiện trong python rùa. Sự kiện có thể được thực hiện theo hai cách. Sự kiện chuột – hành động được kích hoạt khi nhấp vào nút chuột. Sự kiện bàn phím – hành động được kích hoạt khi nhấn một phím từ bàn phím .

con rùa () trong Python là gì?

rùa là thư viện Python được cài đặt sẵn cho phép người dùng tạo ảnh và hình dạng bằng cách cung cấp cho họ một canvas ảo . Cây bút trên màn hình mà bạn sử dụng để vẽ được gọi là con rùa và đây là tên gọi của thư viện.