单击 tkinter 按钮时更改图片

Change picture when tkinter button clicked

我在 python 3 中使用 tkinter 生成一些按钮和一些标签,这些按钮和标签在单击按钮时会改变颜色(并在 Rasp pi 上打开一个 GPIO 引脚)

是否可以更改单击按钮时按钮使用的 .gif?我希望它在 GPIO 引脚关闭时显示 ON,在 GPIO 引脚打开时显示 OFF。

目前我有:

#BCM17
GPIO.setup(17,GPIO.OUT)
colour17=StringVar()
pinstate17=GPIO.input(17)
if pinstate17==1:
    colour17.set('red')
else:
    colour17.set('green')

BCM17Bimage=tk.PhotoImage(file='on.gif')
BCM17B = Button(clock, text="GPIO 0\nBCM 17", image=BCM17Bimage, width=78, height=100, bg="grey", command=BCM17f).grid(column=2, row=1)
BCM17L = Label(clock, text="GPIO 0\nBCM 17", font=(fontname,12), fg='white', bg=colour17.get(), width=10, height=2)
BCM17L.grid(column=0, row=1)

而且,按钮的定义是:

def BCM17f():
    pinstate17=GPIO.input(17)
    colour17.set('red' if pinstate17==0 else 'green')
    BCM17L.configure(bg=colour17.get())
    if pinstate17==0:
        GPIO.output(17,True)
    else:
        GPIO.output(17,False)
    print(pinstate17)

顺便说一句 - 当人们在这里回复 post 时是否可以收到电子邮件?看起来不错,但在任何地方都看不到它的选项。

已解决:

#BCM17
GPIO.setup(17,GPIO.OUT)
colour17=StringVar()
pinstate17=GPIO.input(17)
if pinstate17==1:
    colour17.set('red')
else:
    colour17.set('green')
BCM17L = Label(clock, text="GPIO 0\nBCM 17", font=(fontname,12), fg='white', bg=colour17.get(), width=10, height=2)
BCM17L.grid(column=0, row=1)

image17on=tk.PhotoImage(file="on.gif")
image17off=tk.PhotoImage(file="off.gif")

if pinstate17==1:
    image17=image17on
else:
    image17=image17off

BCM17B = Button(clock, text="GPIO 0\nBCM 17",
image=image17,
width=75, height=75, bg="grey",
command=BCM17f)
BCM17B.grid(column=2, row=1)

默认:

def BCM17f():
    pinstate17=GPIO.input(17)
    colour17.set('red' if pinstate17==0 else 'green')
    BCM17L.configure(bg=colour17.get())
    global toggle17
    if toggle17 and pinstate17==1:
        GPIO.output(17,False)
        BCM17B.config(image=image17off)
        toggle17 = not toggle17
    else:
        GPIO.output(17,True)
        BCM17B.config(image=image17on)
        toggle17 = not toggle17