鱼C论坛

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

tkinter为什么 绑定不成功

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

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

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

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

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

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

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

  36. ball = Ball(canvas, "red")
  37. if ball.started:           #如果鼠标按下就开始运动
  38.     ball.draw()
  39. root.mainloop()
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-3-23 19:31:11 | 显示全部楼层
https://ask.csdn.net/questions/1053114
看看是不是
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-23 19:38:31 | 显示全部楼层
不是这个原因。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-24 13:20:05 | 显示全部楼层
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-3-27 09:48:04 | 显示全部楼层
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

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

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

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

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

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

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

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

  36. ball = Ball(canvas, "red")

  37. while True:
  38.     try:
  39.         if ball.started:           #如果鼠标按下就开始运动
  40.             ball.draw()
  41.             
  42.         root.update() # 刷新页面,是程序不会未响应
  43.     except Exception:
  44.         break
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-4-18 20:38

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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