溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

python使用canvas怎么實現(xiàn)移動并綁定鍵盤

發(fā)布時間:2021-12-20 19:18:50 來源:億速云 閱讀:140 作者:柒染 欄目:開發(fā)技術

python使用canvas怎么實現(xiàn)移動并綁定鍵盤,很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細講解,有這方面需求的人可以來學習下,希望你能有所收獲。

    一、任務

    用多個按鈕或者按鈕+文本框實現(xiàn)不同物體(橢圓,長方形,扇形)的各個方向的運動(上下左右)

    效果圖:

    python使用canvas怎么實現(xiàn)移動并綁定鍵盤

    二、實現(xiàn)

    (1)導庫并創(chuàng)建畫布

    import tkinter as tk
    window = tk.Tk()
    window.title('my window')
    ##窗口尺寸
    window.geometry('300x350')
    #新建畫布
    canvas=tk.Canvas(window,bg='blue',height=150,width=300)

    (2)畫圖形

    #畫線
    x0,y0,x1,y1=50,50,80,80
    line=canvas.create_line(x0,y0,x1,y1)
    #畫?
    oval=canvas.create_oval(x0,y0,x1,y1,fill='red')
    #畫一個扇形
    arc = canvas.create_arc(x0+30, y0+30, x1+30, y1+30, start=0, extent=90)
    #畫一個矩形
    rect = canvas.create_rectangle(100, 30, 100+20, 30+20)   
    canvas.pack()

    (3)創(chuàng)建按鈕和文本框

    #創(chuàng)建文本框
    entry = tk.Entry(window, show=None)
    entry.pack()
    #創(chuàng)建文本
    label = tk.Label(window , text='圓:oval;線:line;扇形:arc;矩形 :rect')
    label.pack()  #打包
    #創(chuàng)建一個Button
    b=tk.Button(window,text='下',command=moveit)
    b.place(x=120,y=280)
    up=tk.Button(window,text='上',command=moveup)
    up.place(x=120,y=220)
    left=tk.Button(window,text='左',command=moveleft)
    left.place(x=80,y=250)
    right=tk.Button(window,text='右',command=moveright)
    right.place(x=160,y=250)

    (4)功能實現(xiàn)

    #向下移動
    def moveit():
        obj = entry.get()  #獲取輸入框的參數(shù),移動那個圖形
        if obj =='rect':
            canvas.move(rect,0,2)  #第一個參數(shù)是圖形
        elif obj == 'arc':
            canvas.move(arc, 0, 2)  # 第一個參數(shù)是圖形
        elif obj =='oval':
            canvas.move(oval, 0, 2)  # 第一個參數(shù)是圖形
        elif obj == 'line':
            canvas.move(line, 0, 2)
    #向上移動
    def moveup():
        obj = entry.get()  # 獲取輸入框的參數(shù),移動那個圖形
        if obj =='rect':
            canvas.move(rect,0,-2)  #第一個參數(shù)是圖形
        elif obj == 'arc':
            canvas.move(arc,0,-2)  # 第一個參數(shù)是圖形
        elif obj =='oval':
            canvas.move(oval,0,-2)  # 第一個參數(shù)是圖形
        elif obj == 'line':
            canvas.move(line,0,-2)
    #向左移動
    def moveleft():
        obj = entry.get()  # 獲取輸入框的參數(shù),移動那個圖形
        if obj =='rect':
            canvas.move(rect, -2 ,0)  #第一個參數(shù)是圖形
        elif obj == 'arc':
            canvas.move(arc, -2 ,0)  # 第一個參數(shù)是圖形
        elif obj =='oval':
            canvas.move(oval, -2 ,0)  # 第一個參數(shù)是圖形
        elif obj == 'line':
            canvas.move(line, -2, 0)
    #向右移動
    def moveright():
        obj = entry.get()  # 獲取輸入框的參數(shù),移動那個圖形
        if obj =='rect':
            canvas.move(rect,2,0)  #第一個參數(shù)是圖形
        elif obj == 'arc':
            canvas.move(arc, 2,0)  # 第一個參數(shù)是圖形
        elif obj =='oval':
            canvas.move(oval, 2,0)  # 第一個參數(shù)是圖形
        elif obj == 'line':
            canvas.move(line , 2, 0)

    三、完整代碼

    import tkinter as tk
    window = tk.Tk()
    window.title('my window')
    ##窗口尺寸
    window.geometry('300x350')
    #新建畫布
    canvas=tk.Canvas(window,bg='blue',height=150,width=300)
    #畫線
    x0,y0,x1,y1=50,50,80,80
    line=canvas.create_line(x0,y0,x1,y1)
    #畫?
    oval=canvas.create_oval(x0,y0,x1,y1,fill='red')
    #畫一個扇形
    arc = canvas.create_arc(x0+30, y0+30, x1+30, y1+30, start=0, extent=90)
    #畫一個矩形
    rect = canvas.create_rectangle(100, 30, 100+20, 30+20)   
    canvas.pack()
    #創(chuàng)建文本框
    entry = tk.Entry(window, show=None)
    entry.pack()
    #創(chuàng)建文本
    label = tk.Label(window , text='圓:oval;線:line;扇形:arc;矩形 :rect')
    label.pack()  #打包
    #向下移動
    def moveit():
        obj = entry.get()  #獲取輸入框的參數(shù),移動那個圖形
        if obj =='rect':
            canvas.move(rect,0,2)  #第一個參數(shù)是圖形
        elif obj == 'arc':
            canvas.move(arc, 0, 2)  # 第一個參數(shù)是圖形
        elif obj =='oval':
            canvas.move(oval, 0, 2)  # 第一個參數(shù)是圖形
        elif obj == 'line':
            canvas.move(line, 0, 2)
    #向上移動
    def moveup():
        obj = entry.get()  # 獲取輸入框的參數(shù),移動那個圖形
        if obj =='rect':
            canvas.move(rect,0,-2)  #第一個參數(shù)是圖形
        elif obj == 'arc':
            canvas.move(arc,0,-2)  # 第一個參數(shù)是圖形
        elif obj =='oval':
            canvas.move(oval,0,-2)  # 第一個參數(shù)是圖形
        elif obj == 'line':
            canvas.move(line,0,-2)
    #向左移動
    def moveleft():
        obj = entry.get()  # 獲取輸入框的參數(shù),移動那個圖形
        if obj =='rect':
            canvas.move(rect, -2 ,0)  #第一個參數(shù)是圖形
        elif obj == 'arc':
            canvas.move(arc, -2 ,0)  # 第一個參數(shù)是圖形
        elif obj =='oval':
            canvas.move(oval, -2 ,0)  # 第一個參數(shù)是圖形
        elif obj == 'line':
            canvas.move(line, -2, 0)
    #向右移動
    def moveright():
        obj = entry.get()  # 獲取輸入框的參數(shù),移動那個圖形
        if obj =='rect':
            canvas.move(rect,2,0)  #第一個參數(shù)是圖形
        elif obj == 'arc':
            canvas.move(arc, 2,0)  # 第一個參數(shù)是圖形
        elif obj =='oval':
            canvas.move(oval, 2,0)  # 第一個參數(shù)是圖形
        elif obj == 'line':
            canvas.move(line , 2, 0)
    #創(chuàng)建一個Button
    b=tk.Button(window,text='下',command=moveit)
    b.place(x=120,y=280)
    up=tk.Button(window,text='上',command=moveup)
    up.place(x=120,y=220)
    left=tk.Button(window,text='左',command=moveleft)
    left.place(x=80,y=250)
    right=tk.Button(window,text='右',command=moveright)
    right.place(x=160,y=250)
    ##顯示出來
    window.mainloop()

    四、升級—綁定鍵盤事件

    增加鍵盤綁定事件:

    # 實現(xiàn)鍵盤綁定
    window.bind("<KeyPress-Down>", moveit)  #第二個參數(shù)傳一個回調函數(shù)
    window.bind("<KeyPress-Left>", moveleft)
    window.bind("<KeyPress-Right>", moveright)
    window.bind("<KeyPress-Up>", moveup)

    完整代碼:

    import tkinter as tk
    window = tk.Tk()
    window.title('my window')
    ##窗口尺寸
    window.geometry('300x350')
    #新建畫布
    canvas=tk.Canvas(window,bg='blue',height=150,width=300)
    #畫線
    x0,y0,x1,y1=50,50,80,80
    line=canvas.create_line(x0,y0,x1,y1)
    #畫?
    oval=canvas.create_oval(x0,y0,x1,y1,fill='red')
    #畫一個扇形
    arc = canvas.create_arc(x0+30, y0+30, x1+30, y1+30, start=0, extent=90)
    #畫一個矩形
    rect = canvas.create_rectangle(100, 30, 100+20, 30+20)   
    canvas.pack()
    #創(chuàng)建文本框
    entry = tk.Entry(window, show=None)
    entry.pack()
    #創(chuàng)建文本
    label = tk.Label(window , text='圓:oval;線:line;扇形:arc;矩形 :rect')
    label.pack()  #打包
    #向下移動
    def moveit(event):
        obj = entry.get()  #獲取輸入框的參數(shù),移動那個圖形
        if obj =='rect':
            canvas.move(rect,0,2)  #第一個參數(shù)是圖形
        elif obj == 'arc':
            canvas.move(arc, 0, 2)  # 第一個參數(shù)是圖形
        elif obj =='oval':
            canvas.move(oval, 0, 2)  # 第一個參數(shù)是圖形
        elif obj == 'line':
            canvas.move(line, 0, 2)
    #向上移動
    def moveup(event):
        obj = entry.get()  # 獲取輸入框的參數(shù),移動那個圖形
        if obj =='rect':
            canvas.move(rect,0,-2)  #第一個參數(shù)是圖形
        elif obj == 'arc':
            canvas.move(arc,0,-2)  # 第一個參數(shù)是圖形
        elif obj =='oval':
            canvas.move(oval,0,-2)  # 第一個參數(shù)是圖形
        elif obj == 'line':
            canvas.move(line,0,-2)
    #向左移動
    def moveleft(event):
        obj = entry.get()  # 獲取輸入框的參數(shù),移動那個圖形
        if obj =='rect':
            canvas.move(rect, -2 ,0)  #第一個參數(shù)是圖形
        elif obj == 'arc':
            canvas.move(arc, -2 ,0)  # 第一個參數(shù)是圖形
        elif obj =='oval':
            canvas.move(oval, -2 ,0)  # 第一個參數(shù)是圖形
        elif obj == 'line':
            canvas.move(line, -2, 0)
    #向右移動
    def moveright(event):
        obj = entry.get()  # 獲取輸入框的參數(shù),移動那個圖形
        if obj =='rect':
            canvas.move(rect,2,0)  #第一個參數(shù)是圖形
        elif obj == 'arc':
            canvas.move(arc, 2,0)  # 第一個參數(shù)是圖形
        elif obj =='oval':
            canvas.move(oval, 2,0)  # 第一個參數(shù)是圖形
        elif obj == 'line':
            canvas.move(line , 2, 0)
    #創(chuàng)建一個Button
    b=tk.Button(window,text='下',command=moveit)
    b.place(x=120,y=280)
    up=tk.Button(window,text='上',command=moveup)
    up.place(x=120,y=220)
    left=tk.Button(window,text='左',command=moveleft)
    left.place(x=80,y=250)
    right=tk.Button(window,text='右',command=moveright)
    right.place(x=160,y=250)
    # 實現(xiàn)鍵盤綁定
    window.bind("<KeyPress-Down>", moveit)  #第二個參數(shù)傳一個回調函數(shù)
    window.bind("<KeyPress-Left>", moveleft)
    window.bind("<KeyPress-Right>", moveright)
    window.bind("<KeyPress-Up>", moveup)
    ##顯示出來
    window.mainloop()

    看完上述內容是否對您有幫助呢?如果還想對相關知識有進一步的了解或閱讀更多相關文章,請關注億速云行業(yè)資訊頻道,感謝您對億速云的支持。

    向AI問一下細節(jié)

    免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內容。

    AI