python - 如何使用下一个按钮 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 会不会有麻烦?如果是这样,请告诉我如何正确操作。)
解决方案
正如您所提到的,发生的一个“错误”是图像立即跳转到 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
默认值(从这个意义上说,您可以选择将其设置为默认值)。以这种方式使用lambda
for 键绑定允许我们将参数传递给函数。我们指定要传递给函数的参数,然后指定函数,参数用括号括起来。
推荐阅读
- ios - Firebase Crashlytics:缺少可选的 dSYM
- spring-boot - 具有正确行数但具有空字段的 Spring JPA 结果查询
- php - 如何循环不同的csv并合并它们?
- css - CSS - 带有右边框细化的打字机动画
- mysql - Mysql 巨大的表,count(*) 的问题很慢
- django - Django prefetch_related 需要大量运行时间
- javascript - 如何使用 $(this) 同时淡出两个子元素
- sql - 有没有一种方法可以从 SQL 中选择,也可以从 Oracle 中选择并在数据网格中显示?
- machine-learning - 使用标签作为特征输入的分类
- java - 强制 Apache HttpClient 检测 DNS 更改