У меня есть база данных, содержащая слайды, с именем "df_slides". Теперь я хотел бы отобразить отдельный silde, и когда я нажимаю на кнопку «next», должен отображаться следующий слайд в базе данных. Слайды хранятся в формате base64.
Это то, что я сделал до сих пор:
import tkinter
from PIL import Image, ImageTk
import base64
import pandas as pd
i = 0
def load_next_img():
global pil_image, tk_image, i
i = i+1
base64string = df_slides["Slide_Image"][i]
imgdata = base64.b64decode(base64string)
pil_image = Image.open(io.BytesIO(imgdata))
tk_image = ImageTk.PhotoImage(pil_image)
panel = tkinter.Label(root, image = tk_image)
panel.pack(side = "bottom", fill = "both", expand = "yes")
label['image'] = tk_image
root = tkinter.Tk()
label = tkinter.Label(root)
label.pack(padx=5, pady=5)
nextbutton = tkinter.Button(text="next", command=load_next_img)
nextbutton.pack()
root.mainloop()
Я только начал с tkinter, и у меня возникли некоторые трудности. По сути, программа работает, но когда я ее открываю, у меня возникают некоторые трудности:
- Она открывается, но показывает только «следующую» кнопку

Затем я нажимаю «далее», и затем отображаются два изображения
... затем, когда я продолжаю нажимать «далее», все нормально ион показывает только одно изображение за раз
Редактировать
Если я попытаюсь:
import tkinter
from PIL import Image, ImageTk
import base64
import pandas as pd
i = 0
def load_next_img():
global pil_image, tk_image, i
i = i+1
base64string = df_slides["Slide_Image"][i]
imgdata = base64.b64decode(base64string)
pil_image = Image.open(io.BytesIO(imgdata))
tk_image = ImageTk.PhotoImage(pil_image)
label['image'] = tk_image
root = tkinter.Tk()
label = tkinter.Label(root,image = tk_image)
label.pack(side = "bottom", fill = "both", expand = "yes")
nextbutton = tkinter.Button(text="next", command=load_next_img)
nextbutton.pack()
root.mainloop()
Я получу ошибку:
NameError:имя 'tk_image' не определено