首页 > 解决方案 > 如何使用下一个按钮 python 更改标签(图像形式)

问题描述

我目前是 python 的新手,我正在尝试通过单击下一步按钮将标签从一个图像切换到另一个图像。这是我的代码:

from tkinter import *

def next1():
    global slide
    slide=1
    if slide==1:
        bglabel.config(image=bg1)
    elif slide==2:
        bglabel.config(image=bg2)
    slide+=1
    window.update()

window=Tk()
window.geometry("1500x750+0+0")

bg1=PhotoImage(file="backslide1.png")
bg2=PhotoImage(file="backslide2.png")
nextbutton=PhotoImage(file="next.png")

bglabel=Label(window, image=bg1)
bglabel.place(x=600,y=200)

nextbutton1=Button(window, image=nextbutton, bd=0, command=next1())

window.bind('<Button-1>', next1())

我坐了一个小时左右,试图篡改幻灯片变量(尝试在 def 之前声明它,删除全局,更改值,更改 slide+=1 的位置等),但总是会发生两件事之一;要么它卡在 bg1 上,单击按钮但什么也不做,要么直接跳到 bg2。我还尝试将 next1 拆分为两个不同的 def,一个用于变量跟踪,一个用于切换 bglabel,但仍然是相同的输出。请帮忙。

(另外,当我继续添加按钮时,window.bind 会不会有麻烦?如果是这样,请告诉我如何正确操作。)

标签: pythonpython-3.xtkinter

解决方案


正如您所提到的,发生的一个“错误”是图像立即跳转到 image bg2。这是导致:

nextbutton1=Button(window, image=nextbutton, bd=0, command=next1())

更具体地说,在您声明与按钮关联的命令的位置:

command=next1()

使用括起来的括号,您正在调用该函数,next1即,一旦创建了按钮,就运行指定的函数。

要解决这个问题,只需删除这对括号:

nextbutton1=Button(window, image=nextbutton, bd=0, command=next1)

您的键绑定也是如此。这样,按钮/键现在就有了对该函数的引用——它知道要运行什么函数,并在执行指定的操作时运行它。

有关键绑定的更多信息...当您使用bind分配键来运行功能时,需要知道要运行的任何功能。目前,next您尝试绑定的函数没有任何迹象表明可以使用键盘按钮事件调用它。为了解决这个问题,我们在next指定事件时设置了一个默认参数:

def next1(event=None):
    #rest of function code here

window.bind('<Button-1>', lambda event: next(event))

设置默认参数,event=None基本上意味着如果没有从任何调用它的函数将值event传递给函数,则将其设置为None默认值(从这个意义上说,您可以选择将其设置为默认值)。以这种方式使用lambdafor 键绑定允许我们将参数传递给函数。我们指定要传递给函数的参数,然后指定函数,参数用括号括起来。


推荐阅读