Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/292.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用tkinter单击图像_Python_Python 3.x_Tkinter - Fatal编程技术网

Python 使用tkinter单击图像

Python 使用tkinter单击图像,python,python-3.x,tkinter,Python,Python 3.x,Tkinter,我有一个包含幻灯片的数据库,名为“df_幻灯片”。现在我想显示单个幻灯片,当我单击“下一步”按钮时,应该显示数据库中的下一张幻灯片。幻灯片以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

我有一个包含幻灯片的数据库,名为“df_幻灯片”。现在我想显示单个幻灯片,当我单击“下一步”按钮时,应该显示数据库中的下一张幻灯片。幻灯片以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()
    
    我得到一个错误:

    名称错误:未定义名称“tk_图像”


    每次单击“下一步”,您都会创建一个名为“面板”的新
    标签
    小部件。使用现有的
    标签
    。@HenryYik感谢您的评论。我该怎么做?(如果这是微不足道的,很抱歉)在初始设置的
    标签中删除
    image=tk_image
    。您只需要在调用
    load\u next\u img
    时更改它。@HenryYik太棒了!谢谢!您还知道如何用第一张幻灯片初始化它吗?您的意思是要在程序开始时显示第一张图像吗?如果是这样,只需调用
    load\u next\u img()
    。在主循环之前。