强基初中数学&学Python——第九十七课 海龟画图基本操作方法之十一:键盘事件

——键盘事件——

(1)键按下事件turtle.onkeypress(fun, key=None)

(2)键释放事件turtle.onkeyrelease(fun, key)

(3)键点击事件turtle.onkey(fun, key)

  参数fun,一个无参数的函数或对象方法,当该参数是None表示解除绑定。

  参数key,一个字符串表示键 (例如 "a") 或键标 (例如 "space")turtle.onkeypress该参数可以为None,表示按下任意键。

  为了海龟画图能接受键盘事件,加入键盘事件侦听函数turtle.listen()

  附录1是这些函数的测试程序,点击其它键1次和点击"a"键1次输出的结果如下

 

。可见,键释放事件turtle.onkeyrelease并不响应,调换turtle.onkeyreleaseturtle.onkey的顺序,使turtle.onkeyreleaseturtle.onkey的后面。同样的点击方法,结果如下

 

。可见,如果turtle.onkeyreleaseturtle.onkey都设置,最后设置的有效。

  把turtle.onkeypress的任意键函数放在"a"键函数之后,点击"a”键,结果不变

 

。可见,turtle.onkeypress的任意键事件函数不能覆盖特定键事件函数,与在程序中的位置无关。

  如果想通过用鼠标左键点击海龟开启键盘事件侦听,敲击键盘"a"键后在该位置打印字母"a"

  代码附录2,鼠标左键点击海龟后点a键,结果如下

 

 

。由代码可见,为了能用turtle.onclick开启键盘侦听,然而turtle.onclick要求的fun参数需要2个参数,不能直接使用turtle.listen()。为了能使turtle.listen可以作为turtle.onclick等鼠标事件的函数参数funturtle.listen就增加了一对虚拟参数(这对参数在turtle.listen内部是不使用的),完整的turtle.listen函数是(4)键盘侦听开启函数turtle.listen(xdummy=None, ydummy=None)。因此附录2的代码可以修改为附录3,运行结果一致。

  例题1不用turtle.textinput函数,编写一段程序,在画布上不同地方打印出"A""a"

  解:代码附录4,运行结果截图如下

 

  练习题1不用turtle.textinput函数,编写一段程序,在画布上不同地方打印出多个"B""b"

 

附录1

#键盘事件测试
import turtle as t
t.setup(500, 500)
t.screensize(400, 400)
t.shape("square")
def keypressany():
    print("任意键被按下。")
def keypress():
    print("a键被按下。")
def keyrelease():
    print("a键被释放。")  
def key():
    print("a键被点击。")  
t.onkeypress(keypressany)    #任意键被按下
t.onkeypress(keypress, "a")  #a键被按下
t.onkeyrelease(keyrelease, "a")  #a键被释放
t.onkey(key, "a")                        #a键被点击一次
t.listen()                                    #启动键盘监听
t.mainloop()

附录2
#键盘事件测试
import turtle as t
t.setup(500, 500)
t.screensize(400, 400)
t.up()
#开启键盘输入  
def repos(px,py):
    t.listen()  #启动键盘监听
#输入字母"a"后关闭      
def printkey():
    t.write("a",font=("黑体", 30, "normal"))   
t.onkey(printkey, "a")                        #a键被点击一次       
t.onclick(repos)                     
t.mainloop()

附录3
#键盘事件测试
import turtle as t
t.setup(500, 500)
t.screensize(400, 400)
t.up()
#输入字母"a"后关闭      
def printkey():
    t.write("a",font=("黑体", 30, "normal"))   
t.onkey(printkey, "a")                        #a键被点击一次       
t.onclick(t.listen)                     
t.mainloop()

 

附录4

#键盘事件测试
import turtle as t
t.setup(500, 500)
t.screensize(400, 400)
t.up()
#移动
#输入字母"a"后关闭
case=False
def shift():
    global case
    case= not case      
def printa():
    if case:
        printA()
    else:
        t.write("a",font=("黑体", 30, "normal"))   
def printA():
    t.write("A",font=("黑体", 30, "normal"))  
t.onkey(printa, "a")                        #a键被点击一次
t.onkey(printA, "A")                        #A键被点击一次(处于Caps Lock 状态)   
t.onkeypress(shift, "0x10")             #Shift按下
t.onkeyrelease(shift, "0x10")          #Shift释放
t.onscreenclick(t.listen)   
t.onscreenclick(t.setpos,add=True)                  
t.mainloop()