鱼C论坛

 找回密码
 立即注册
查看: 814|回复: 5

tkinter为什么 绑定不成功

[复制链接]
发表于 2020-3-23 19:11:29 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 一个账号 于 2020-3-24 11:16 编辑
# 目的是实现左键开始运动,空格暂停,又空格运动。
import tkinter as  tk
class Ball:
    def __init__(self, canvas, color):
        self.canvas = canvas           # 在类的初始化的函数里面初始化canvas
        self.id = canvas.create_oval(10, 10, 25, 25, fill=color)  #画一个实心的球并记录下它的id
        self.canvas.move(self.id, 250, 200)     #创建球的默认在主界面上的位置,把它放在屏幕中间
        self.x = 0                     #默认不水平移动
        self.y = -1                    #默认初始向上移动
        self.started=False             #赋初值False
        self.canvas.bind_all('<Button-1>',self.start)     #绑定鼠标左键
        self.canvas.bind_all('<space>',self.pause)        #绑定空格
        
    def start(self,event):
        self.started=True         #按鼠标就开始

    def pause(self,event):           #按空格就暂停,按空格在开始
        if self.started:
            self.started=False
        else: 
            self.started=True
    def draw(self):
        self.canvas.move(self.id, self.x, self.y)               #每次移动的像素
        pos = self.canvas.coords(self.id)                   #获得移动后的坐标(x1,y1,x2,y2)
        if pos[1] <= 0:                     #若到达顶端,就向下
            self.y = 1
        if pos[3] >= 400:           #若到达底部,就向上
            self.y = -1
        self.canvas.after(5, self.draw)        

root =tk.Tk()
root.title("Python game testing")
root.resizable(0, 0)
root.wm_attributes("-topmost", 1)

canvas = tk.Canvas(root, width=500, height=400, bd=0, highlightthickness=0)
canvas.pack()
canvas.update()

ball = Ball(canvas, "red")
if ball.started:           #如果鼠标按下就开始运动
    ball.draw()
root.mainloop()
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-3-23 19:31:11 | 显示全部楼层
https://ask.csdn.net/questions/1053114
看看是不是
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-23 19:38:31 | 显示全部楼层
不是这个原因。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-24 13:20:05 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-3-27 09:48:04 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-3-28 17:31:22 | 显示全部楼层
因为程序时从上往下执行的吗!

执行到   if ball.started:   因为默认是 False ,所以不会执行 if 语句块里的内容。
到了 mainloop 的时候,是不会一直执行 if ball.started: 语句的。

做法就是 把 mainloop 去掉,因为一会儿要写循环,如果是死循环,程序就会执行不到这里,

循环里面就是 去一直执行  if ball.started:
还得加上 root.update() 如果不加程序会卡掉。
还得判断窗口是否退出,不判断会出现错误,
只需要捕获异常即可。

最终代码是:
# 目的是实现左键开始运动,空格暂停,又空格运动。
import tkinter as  tk
class Ball:
    def __init__(self, canvas, color):
        self.canvas = canvas           # 在类的初始化的函数里面初始化canvas
        self.id = canvas.create_oval(10, 10, 25, 25, fill=color)  #画一个实心的球并记录下它的id
        self.canvas.move(self.id, 250, 200)     #创建球的默认在主界面上的位置,把它放在屏幕中间
        self.x = 0                     #默认不水平移动
        self.y = -1                    #默认初始向上移动
        self.started=False             #赋初值False
        self.canvas.bind('<Button-1>',self.start)     #绑定鼠标左键
        self.canvas.bind('<space>',self.pause)        #绑定空格
        
    def start(self,event):
        self.started=True         #按鼠标就开始

    def pause(self,event):           #按空格就暂停,按空格在开始
        if self.started:
            self.started=False
        else: 
            self.started=True
    def draw(self):
        self.canvas.move(self.id, self.x, self.y)               #每次移动的像素
        pos = self.canvas.coords(self.id)                   #获得移动后的坐标(x1,y1,x2,y2)
        if pos[1] <= 0:                     #若到达顶端,就向下
            self.y = 1
        if pos[3] >= 400:           #若到达底部,就向上
            self.y = -1
        self.canvas.after(5, self.draw)        

root =tk.Tk()
root.title("Python game testing")
root.resizable(0, 0)
root.wm_attributes("-topmost", 1)

canvas = tk.Canvas(root, width=500, height=400, bd=0, highlightthickness=0)
canvas.pack()
canvas.update()

ball = Ball(canvas, "red")

while True:
    try:
        if ball.started:           #如果鼠标按下就开始运动
            ball.draw()
            
        root.update() # 刷新页面,是程序不会未响应
    except Exception:
        break
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-25 05:12

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表