如何解决TypeError:back缺少1个必需的位置参数:“ image_number”
我试图用tkinter制作一个可以工作的图像查看器。但是由于某种原因,后退按钮将无法使用。每次尝试使用后退按钮时,我都会不断收到TypeError:back()缺少1个必需的位置参数:“ image_number”。我是python的新手,所以这可能是一个明显的错误。另外,您还必须使用自己的照片进行测试。
视频链接:https://www.youtube.com/watchv=zg4c92pNFeo&list=PLCC34OHNcOtoC6GglhF3ncJ5rLwQrLGnV&index=9
from tkinter import *
from PIL import ImageTk,Image
root = Tk()
root.title("Image viewer")
my_img1 = ImageTk.PhotoImage(Image.open("images/iu.gif"))
my_img2 = ImageTk.PhotoImage(Image.open("images/player2.ico"))
my_img3 = ImageTk.PhotoImage(Image.open("images/Codm.PNG"))
my_img4 = ImageTk.PhotoImage(Image.open("images/Heroes online.png"))
my_img5 = ImageTk.PhotoImage(Image.open("images/Google search.png"))
image_list = [my_img1,my_img2,my_img3,my_img4,my_img5]
my_label = Label(image=my_img1)
my_label.grid(row=0,column=0,columnspan=3)
def forward(image_number):
global my_label
global button_forward
global button_back
my_label.grid_forget()
my_label= Label(image=image_list[image_number-1])
button_forward= Button(root,text= ">>",command= lambda : forward(image_number+1))
button_back= Button(root,text= "<<",command= lambda : back(image_number-1))
if image_number == 5:
button_forward = Button(root,text=">>",state= DISABLED)
my_label.grid(row=0,columnspan=3)
button_quit.grid(row=1,column=1)
button_forward.grid(row=1,column=2)
def back(image_number):
global my_label
global button_forward
global button_back
my_label.grid_forget()
my_label = Label(image=image_list[image_number-1])
button_forward = Button(root,command=lambda: forward(image_number+1))
button_back = Button(root,text="<<",command=lambda: back(image_number-1))
my_label.grid(row=0,column=2)
button_back = Button(root,command= back)
button_quit = Button(root,text= "Exit program",command=root.quit)
button_forward = Button(root,text = ">>",command= lambda : forward(2))
button_back.grid(row=1,column=0)
button_quit.grid(row=1,column=1)
button_forward.grid(row=1,column=2)
root.mainloop()
这是我不断收到的错误
Exception in Tkinter callback
Traceback (most recent call last):
File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/tkinter/__init__.py",line 1883,in __call__
return self.func(*args)
TypeError: back() missing 1 required positional argument: 'image_number'
解决方法
您可以采取以下措施来清理此代码:
- 创建不含单个变量的图像列表
- 不要为每张照片重新创建标签和按钮
- 使用全局图像索引来指示当前图像
- 使用按钮更改索引,并调用相同的功能来更新标签和按钮状态。
尝试以下代码:
from tkinter import *
from PIL import ImageTk,Image
root = Tk()
root.title("Image viewer")
image_list = [ # all images
ImageTk.PhotoImage(Image.open("images/iu.gif")),ImageTk.PhotoImage(Image.open("images/player2.ico")),ImageTk.PhotoImage(Image.open("images/Codm.PNG")),ImageTk.PhotoImage(Image.open("images/Heroes online.png")),ImageTk.PhotoImage(Image.open("images/Google search.png"))
]
image_number = 0 # current image
my_label = Label(image=image_list[image_number]) # holds photo
my_label.grid(row=0,column=0,columnspan=3)
def forward(): # forward button
global image_number
image_number+=1 # next photo
updatelabel()
def back(): # back button
global image_number
image_number-=1 # previous photo
updatelabel()
def updatelabel(): # show current photo
my_label.configure(image=image_list[image_number]) # show image
my_label.image = image_list[image_number] # prevent garbage collection
button_forward["state"] = "normal"
button_back["state"] = "normal"
if image_number == len(image_list)-1: # if last image
button_forward["state"] = "disabled"
if image_number == 0: # if first image
button_back["state"] = "disabled"
button_back = Button(root,text= "<<",command= back)
button_back["state"] = "disabled" # start at first photo
button_quit = Button(root,text= "Exit program",command=root.quit)
button_forward = Button(root,text = ">>",command= lambda : forward())
button_back.grid(row=1,column=0)
button_quit.grid(row=1,column=1)
button_forward.grid(row=1,column=2)
root.mainloop()
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。