Python tkinter库之Canvas按键事件移动物体 (模拟推箱子小游戏)

简介: Python tkinter库之Canvas按键事件移动物体 (模拟推箱子小游戏)

Canvas上的物体用 bind_all(键值,事件函数(event)) 绑定后,就可用move(物体的id,横向移动坐标,纵向移动坐标) 来移动物体了。以下代码模拟了推箱子小游戏中箱子移动的动作,仅限制了边界暂没有添加其它箱子和砖墙等障碍物:

import tkinter as tk
import pyautogui as ag
def Box_Move(event):
    global x,y,w
    if event.keysym == "Up":
        if y-w>0:
            tCanvas.move(box,0,-w)
            tCanvas.move(box2,0,-w)
            tCanvas.move(pol,0,-w)
            y-=w
    elif event.keysym == "Down":
        if y+w<400-w:
            tCanvas.move(box,0,w)
            tCanvas.move(box2,0,w)
            tCanvas.move(pol,0,w)
            y+=w
    elif event.keysym == "Left":
        if x-w>0:
            tCanvas.move(box,-w,0)
            tCanvas.move(box2,-w,0)
            tCanvas.move(pol,-w,0)
            x-=w
    elif event.keysym == "Right":
        if x+w<400-w:
            tCanvas.move(box,w,0)
            tCanvas.move(box2,w,0)
            tCanvas.move(pol,w,0)
            x+=w
def Window_Open(W, H):
    X, Y = ag.size()
    winSize = "%sx%s"%(str(W),str(H))
    winPos = winSize + '+%s+%s'%(str((X-W)//2),str((Y-H)//2))
    win.geometry(winPos)
    win.resizable(False, False)
    title = u'桌面分辨率:%sx%s%s窗体大小:%s'%(str(X),str(Y),' '*3,winSize)
    win.title(title)
    win.update()
def Draw_Lines(w):
    for i in range(20,400,w):
        coord = 20,i,380,i
        tCanvas.create_line(coord)
        coord = i,20,i,380
        tCanvas.create_line(coord)
def Draw_Box():
    global box,pol,box2
    box = tCanvas.create_rectangle(x,y,x+w,y+w,width=2,fill='yellow')
    coord = (x+2,y+2,x+20,y+20,x+2,y+38,x+38,y+38,x+20,y+20,x+38,y+2)
    pol = tCanvas.create_polygon(coord,width=2,outline='green',fill='gold')
    box2 = tCanvas.create_rectangle(x+2,y+2,x+w-2,y+w-2,width=2,outline='red')
if __name__ == '__main__':
    win = tk.Tk()
    Window_Open(400,400)
    tCanvas = tk.Canvas(win, width=win.winfo_width(), height=400, bg='honeydew')
    tCanvas.pack(side="top")
    x ,y, w = 100, 100, 40
    Draw_Lines(w)
    Draw_Box()
     #绑定上下左右方向按键事件
    tCanvas.bind_all("<KeyPress-Up>",   Box_Move)
    tCanvas.bind_all("<KeyPress-Down>", Box_Move)
    tCanvas.bind_all("<KeyPress-Left>", Box_Move)
    tCanvas.bind_all("<KeyPress-Right>",Box_Move)
    win.mainloop()

效果图:

20210402204839469.gif

目录
相关文章
|
1月前
|
机器学习/深度学习 存储 数据挖掘
Python图像处理实用指南:PIL库的多样化应用
本文介绍Python中PIL库在图像处理中的多样化应用,涵盖裁剪、调整大小、旋转、模糊、锐化、亮度和对比度调整、翻转、压缩及添加滤镜等操作。通过具体代码示例,展示如何轻松实现这些功能,帮助读者掌握高效图像处理技术,适用于图片美化、数据分析及机器学习等领域。
73 20
|
1月前
|
机器学习/深度学习 数据可视化 数据挖掘
使用Python实现基于矩阵分解的长期事件(MFLEs)时间序列分析
在现代数据分析中,高维时间序列数据的处理和预测极具挑战性。基于矩阵分解的长期事件(MFLEs)分析技术应运而生,通过降维和时间序列特性结合,有效应对大规模数据。MFLE利用矩阵分解提取潜在特征,降低计算复杂度,过滤噪声,并发现主要模式。相比传统方法如ARIMA和深度学习模型如LSTM,MFLE在多变量处理、计算效率和可解释性上更具优势。通过合理应用MFLE,可在物联网、金融等领域获得良好分析效果。
64 0
使用Python实现基于矩阵分解的长期事件(MFLEs)时间序列分析
|
4天前
|
数据采集 JavaScript Android开发
【02】仿站技术之python技术,看完学会再也不用去购买收费工具了-本次找了小影-感觉页面很好看-本次是爬取vue需要用到Puppeteer库用node.js扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
【02】仿站技术之python技术,看完学会再也不用去购买收费工具了-本次找了小影-感觉页面很好看-本次是爬取vue需要用到Puppeteer库用node.js扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
29 7
【02】仿站技术之python技术,看完学会再也不用去购买收费工具了-本次找了小影-感觉页面很好看-本次是爬取vue需要用到Puppeteer库用node.js扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
|
28天前
|
测试技术 Python
【03】做一个精美的打飞机小游戏,规划游戏项目目录-分门别类所有的资源-库-类-逻辑-打包为可玩的exe-练习python打包为可执行exe-优雅草卓伊凡-持续更新-分享源代码和游戏包供游玩-1.0.2版本
【03】做一个精美的打飞机小游戏,规划游戏项目目录-分门别类所有的资源-库-类-逻辑-打包为可玩的exe-练习python打包为可执行exe-优雅草卓伊凡-持续更新-分享源代码和游戏包供游玩-1.0.2版本
106 31
【03】做一个精美的打飞机小游戏,规划游戏项目目录-分门别类所有的资源-库-类-逻辑-打包为可玩的exe-练习python打包为可执行exe-优雅草卓伊凡-持续更新-分享源代码和游戏包供游玩-1.0.2版本
|
2月前
|
XML JSON 数据库
Python的标准库
Python的标准库
185 77
|
2月前
|
XML JSON 数据库
Python的标准库
Python的标准库
71 11
|
2月前
|
数据可视化 Python
以下是一些常用的图表类型及其Python代码示例,使用Matplotlib和Seaborn库。
通过这些思维导图和分析说明表,您可以更直观地理解和选择适合的数据可视化图表类型,帮助更有效地展示和分析数据。
105 8
|
2月前
|
安全 API 文件存储
Yagmail邮件发送库:如何用Python实现自动化邮件营销?
本文详细介绍了如何使用Yagmail库实现自动化邮件营销。Yagmail是一个简洁强大的Python库,能简化邮件发送流程,支持文本、HTML邮件及附件发送,适用于数字营销场景。文章涵盖了Yagmail的基本使用、高级功能、案例分析及最佳实践,帮助读者轻松上手。
88 4
|
4月前
|
Python
pip批量安装Python库 requirement.txt 离线环境无互联网环境下pip安装Python库
pip批量安装Python库 requirement.txt 离线环境无互联网环境下pip安装Python库
240 3
|
8月前
|
开发工具 git Python
安装和使用`libnum`是一个用于数字理论函数的Python库
【6月更文挑战第19天】`libnum`是Python的数字理论函数库。安装可通过`git clone`,进入目录后运行`python setup.py install`,也可用`pip install libnum`。示例:使用`int_to_hex`将十进制数42转换为十六进制字符串&#39;2a&#39;。注意,信息可能已过时,应查最新文档以确保准确性。如遇问题,参考GitHub仓库或寻求社区帮助。
148 1

热门文章

最新文章

推荐镜像

更多