鱼C论坛

 找回密码
 立即注册
查看: 34|回复: 3

按 钮 A 与 按 钮 B 交 替 变 换

[复制链接]
发表于 2026-5-4 14:49:58 | 显示全部楼层 |阅读模式

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

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

x
  1. from tkinter import *
  2. root=Tk()
  3. m=PhotoImage(file="e://A.png")
  4. n=PhotoImage(file="e://B.png")
  5. b=Button(root,
  6.          relief="ridge",
  7.          borderwidth=11)
  8. b.pack()
  9. def a():
  10.         if b.cget("image") == m :
  11.                 b.config(image=n)
  12.         else :
  13.                 b.config(image=m)
  14.         b.after(3000,a)
  15. a()
  16. mainloop()
复制代码



如 何 实 现 按 钮 A 与 按 钮 B 交 替 变 换 ?
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2026-5-4 14:50:10 | 显示全部楼层
你的代码思路正确,但存在一个小问题:在判断 `b.cget("image")` 时,直接比较两个 PhotoImage 对象的地址,即使图片相同也会返回 False,导致切换逻辑失效。建议改用布尔变量记录当前图片状态,示例如下:
  1. from tkinter import *
  2. root = Tk()
  3. m = PhotoImage(file="e:/A.png")   # 注意路径写法
  4. n = PhotoImage(file="e:/B.png")
  5. b = Button(root, relief="ridge", borderwidth=11)
  6. b.pack()

  7. # 初始显示图片A
  8. b.config(image=m)
  9. state = True   # True表示当前是A

  10. def a():
  11.     global state
  12.     if state:          # 当前是A则换B
  13.         b.config(image=n)
  14.         state = False
  15.     else:              # 当前是B则换A
  16.         b.config(image=m)
  17.         state = True
  18.     b.after(3000, a)   # 3秒后再次切换

  19. a()
  20. mainloop()
复制代码
这样每3秒按钮图片就会在A与B之间交替变换。你也可以把切换触发到鼠标点击事件上(例如绑定 <Button-1>),只需将 b.after(3000, a) 改为不自动调用即可。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2026-5-4 21:01:59 | 显示全部楼层
你可以在a()调用的地方嵌套一个while循环,然后每while一次就sleep()一定时间
  1. from tkinter import *
  2. root=Tk()
  3. m=PhotoImage(file="e://A.png")
  4. n=PhotoImage(file="e://B.png")
  5. b=Button(root,
  6.          relief="ridge",
  7.          borderwidth=11)
  8. b.pack()
  9. def a():
  10.         if b.cget("image") == m :
  11.                 b.config(image=n)
  12.         else :
  13.                 b.config(image=m)
  14.         b.after(3000,a)
  15. while 1:
  16.     a()
  17.     sleep(2000)
  18. mainloop()
复制代码

大概是这样吧太久没写python了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2026-5-6 17:00:14 | 显示全部楼层
学习编程中的Ben 发表于 2026-5-4 21:01
你可以在a()调用的地方嵌套一个while循环,然后每while一次就sleep()一定时间

大概是这样吧太久没写pytho ...

您写的程序,不行呀!

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-5-25 05:18

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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