dragov 发表于 2026-5-4 14:49:58

按 钮 A 与 按 钮 B 交 替 变 换

from tkinter import *
root=Tk()
m=PhotoImage(file="e://A.png")
n=PhotoImage(file="e://B.png")
b=Button(root,
         relief="ridge",
         borderwidth=11)
b.pack()
def a():
      if b.cget("image") == m :
                b.config(image=n)
      else :
                b.config(image=m)
      b.after(3000,a)
a()
mainloop()



如 何 实 现 按 钮 A 与 按 钮 B 交 替 变 换 ?

FishC 发表于 2026-5-4 14:50:10

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

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

def a():
    global state
    if state:          # 当前是A则换B
      b.config(image=n)
      state = False
    else:            # 当前是B则换A
      b.config(image=m)
      state = True
    b.after(3000, a)   # 3秒后再次切换

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

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

学习编程中的Ben 发表于 2026-5-4 21:01:59

你可以在a()调用的地方嵌套一个while循环,然后每while一次就sleep()一定时间
from tkinter import *
root=Tk()
m=PhotoImage(file="e://A.png")
n=PhotoImage(file="e://B.png")
b=Button(root,
         relief="ridge",
         borderwidth=11)
b.pack()
def a():
      if b.cget("image") == m :
                b.config(image=n)
      else :
                b.config(image=m)
      b.after(3000,a)
while 1:
    a()
    sleep(2000)
mainloop()
大概是这样吧太久没写python了

dragov 发表于 2026-5-6 17:00:14

学习编程中的Ben 发表于 2026-5-4 21:01
你可以在a()调用的地方嵌套一个while循环,然后每while一次就sleep()一定时间

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


您写的程序,不行呀!

页: [1]
查看完整版本: 按 钮 A 与 按 钮 B 交 替 变 换