简体   繁体   English

更新图像按钮

[英]Update image button

my problem is that I don't know how to update an image button the location for the image is stored in a text file but even if I reopen the file the button does not update I also tried deleting the button and adding it back but that also didn't work thanks for your help and time.我的问题是我不知道如何更新图像按钮图像的位置存储在文本文件中但即使我重新打开文件按钮也不会更新我也尝试删除按钮并将其添加回来但是也没有工作感谢您的帮助和时间。


#imports
from ast import Lambda
from cProfile import label
from fileinput import filename
from tkinter import Entry, filedialog
from tkinter import *
import os
import shutil
from PIL import ImageTk , Image 
import time

#define the first tk window
window = Tk()
window.geometry("655x600")
window.title("streamdex")
window.resizable(False, False)

icon = PhotoImage(file="data/icons/venkuicon.png")
window.iconphoto(True,icon)
window.config(background="#2e3033")

def save_data12(data):
    with open("data/userinput/data12.txt", "w", encoding="utf-8") as file:
        file.write(data)

global file12
with open("data/image_input/data12.txt", 'r') as file12:
    imgdata12 = file12.read().replace('\n', '')

def new_window12():
    window13 = Toplevel()
    window13.geometry("500x100+200+300")
    window13.config(background="#2e3033")
    window13.title("Edit Button 12")
    Button12 = Button(window13, text="save",command=lambda: [save_data12(entry12.get()),window13.destroy()])
    Button12.place(x=5,y=70)
    entry12 = Entry(window13,width=100, font= ("Arial",12))
    entry12.place(x=5,y=30)
    browse_button12 = Button(window13, text="Change image", command=lambda: [browser12(), window13.destroy()])
    browse_button12.place(x=50, y=70)

streamdex_image12 = PhotoImage(file=imgdata12)
streamdex_button12 = Button(window, text="hello" , command=new_window12 , image=streamdex_image12)
streamdex_button12.place(x=500,y=380)


file12.close() 
with open("data/image_input/data12.txt", 'r') as file:
    imgdata12 = file.read().replace('"', '')
    def change():
        streamdex_button12.place_forget()
        time.sleep(0.1)
        streamdex_button12.place(x=500,y=380)

def browser12():
    filepath = filedialog.askopenfilename(initialdir=os.getcwd(), title="select an Image File" ,filetypes=(("PNG File","*.png"),("JPG File", "*.jpg")))
    with open("data/image_input/data12.txt", "w", encoding="utf-8") as file:
        file.write(filepath)
    change()

window.mainloop()

If this is the code you are referring to, it only executes when the program starts because of the indent.如果这是您所指的代码,则由于缩进,它仅在程序启动时执行。 Although it will read the same thing if run a second time.尽管如果第二次运行它会读取相同的内容。 There is no way to tell which part of the program you mean based on the description.根据描述,无法判断您指的是程序的哪一部分。

global file12
with open("data/image_input/data12.txt", 'r') as file12:
    imgdata12 = file12.read().replace('\n', '')

If there aren't a huge number of images, load them into a list at the beginning and loop through the list.如果没有大量图像,请将它们加载到开头的列表中并循环遍历列表。 The following program appends all images into a list.以下程序将所有图像附加到列表中。 Click on the image to switch to the next.点击图片切换到下一张。 Small icons are used so the images are small enough to be in the source code.使用了小图标,因此图像足够小,可以在源代码中。 You would, of course, be reading files.当然,您会读取文件。

import tkinter as tk     ## Python 3.x

class ChangeImage():
    def __init__(self, root):
        self.photos=[]
        self.load_images()

        self.image_num=0
        self.btn = tk.Button(root, image=self.photos[self.image_num], command=self.next_image)
        self.btn.grid(row=0)
        tk.Button(root, text="Exit", bg="orange", command=root.quit).grid(row=1)


    def next_image(self):
        self.image_num += 1
        if self.image_num >= len(self.photos):
            self.image_num=0

        ## pipe the next image to be displayed to the button
        self.btn["image"]=self.photos[self.image_num]

    def load_images(self):
        """ copy data images to a list that is an instance variable

            all images are hard-coded here and so use data=
            instead of file=
        """
        ladybug_gif_b64="""
    R0lGODlhIAAgALMAAP///wAAADAwMP99Hf8AAP+lAP//AMopUwAAAAAAAAAAAAAAAAAAAAAAAAAA
    AAAAACH5BAAAAAAALAAAAAAgACAAAwTHEMhJq714hp3lDh0GiqH2UWOVAt96pUIsBLKglWg87Dwv
    4xMBj0Asxgg+XKxwLBJrxUGsI5TKnARoVHoLDp5XbNP5cwmNAqwa/aOc13ByrfKOw2UGw1SSxrb+
    AWIxeXsAaX92UDQ1Nh6BdneMhQIHkHGSjYaVlmt4epmacp19YAKEoJRspKWrjBapWWGqcm1uB5tj
    ok4HZa+3m5wEt5kuhpTAcb+FVL/NzspAfDHPysslMJjEIS0oLygnOMVd0SwcHeDk6errEQA7"""

        grape_gif="""
    R0lGODlhIAAgALMAAAAAAAAAgHCAkC6LV76+vvXeswD/ANzc3DLNMubm+v/6zS9PT6Ai8P8A////
    /////yH5BAEAAAkALAAAAAAgACAAAAS00MlJq7046803AF3ofAYYfh8GIEvpoUZcmtOKAO5rLMva
    0rYVKqX5IEq3XDAZo1GGiOhw5rtJc09cVGo7orYwYtYo3d4+DBxJWuSCAQ30+vNTGcxnOIARj3eT
    YhJDQ3woDGl7foNiKBV7aYeEkHEignKFkk4ciYaImJqbkZ+PjZUjaJOElKanqJyRrJyZgSKkokOs
    NYa2q7mcirC5I5FofsK6hcHHgsSgx4a9yzXK0rrV19gRADs="""

        house="""
    R0lGODdhFQAVAPMAAAQ2PESapISCBASCBMTCxPxmNCQiJJya/ISChGRmzPz+/PxmzDQyZDQyZDQy
    ZDQyZCwAAAAAFQAVAAAElJDISau9Vh2WMD0gqHHelJwnsXVloqDd2hrMm8pYYiSHYfMMRm53ULlQ
    HGFFx1MZCciUiVOsPmEkKNVp3UBhJ4Ohy1UxerSgJGZMMBbcBACQlVhRiHvaUsXHgywTdycLdxyB
    gm1vcTyIZW4MeU6NgQEBXEGRcQcIlwQIAwEHoioCAgWmCZ0Iq5+hA6wIpqislgGhthEAOw=="""

        smiley = """
    R0lGODlhEAAQAOeSAKx7Fqx8F61/G62CILCJKriIHM+HALKNMNCIANKKANOMALuRK7WOVLWPV9eR
    ANiSANuXAN2ZAN6aAN+bAOCcAOKeANCjKOShANKnK+imAOyrAN6qSNaxPfCwAOKyJOKyJvKyANW0
    R/S1APW2APW3APa4APe5APm7APm8APq8AO28Ke29LO2/LO2/L+7BM+7BNO6+Re7CMu7BOe7DNPHA
    P+/FOO/FO+jGS+/FQO/GO/DHPOjBdfDIPPDJQPDISPDKQPDKRPDIUPHLQ/HLRerMV/HMR/LNSOvH
    fvLOS/rNP/LPTvLOVe/LdfPRUfPRU/PSU/LPaPPTVPPUVfTUVvLPe/LScPTWWfTXW/TXXPTXX/XY
    Xu/SkvXZYPfVdfXaY/TYcfXaZPXaZvbWfvTYe/XbbvHWl/bdaPbeavvadffea/bebvffbfbdfPvb
    e/fgb/Pam/fgcvfgePTbnfbcl/bfivfjdvfjePbemfjelPXeoPjkePbfmvffnvbfofjlgffjkvfh
    nvjio/nnhvfjovjmlvzlmvrmpvrrmfzpp/zqq/vqr/zssvvvp/vvqfvvuPvvuvvwvfzzwP//////
    ////////////////////////////////////////////////////////////////////////////
    ////////////////////////////////////////////////////////////////////////////
    ////////////////////////////////////////////////////////////////////////////
    ////////////////////////////////////////////////////////////////////////////
    ////////////////////////////////////////////////////////////////////////////
    /////////////////////////////////////////////////////yH+FUNyZWF0ZWQgd2l0aCBU
    aGUgR0lNUAAh+QQBCgD/ACwAAAAAEAAQAAAIzAD/CRxIsKDBfydMlBhxcGAKNIkgPTLUpcPBJIUa
    +VEThswfPDQKokB0yE4aMFiiOPnCJ8PAE20Y6VnTQMsUBkWAjKFyQaCJRYLcmOFipYmRHzV89Kkg
    kESkOme8XHmCREiOGC/2TBAowhGcAyGkKBnCwwKAFnciCAShKA4RAhyK9MAQwIMMOQ8EdhBDKMuN
    BQMEFPigAsoRBQM1BGLjRIiOGSxWBCmToCCMOXSW2HCBo8qWDQcvMMkzCNCbHQga/qMgAYIDBQZU
    yxYYEAA7"""

        clock = """
    R0lGODlhEAAQAPZjACQkJCQkJSQkJyUlJycnJycnKyQmLygoKCosLS0tLS0tLjIxMDIyMjExNDg4
    ODg4OTw9PmBVLW1gLUFBQUJCQ1NRS1ZSSlFRUVZWV1paW11dXnxyX25ub3Fydn99eYhlJo5pKI1q
    KZ9pKYNwNKd5Krp+KJyCM7yNM8uLKsmRKNKfLMmhJNCnKN2sLs+yL9irMuKkJ+2rLOuzL+q1Lfaz
    KvW0KfO9Lf+8KP68Kf+8Kf++Kva+Nv7HKvjFLfjHLf7HLfzLLv/PLvzdL/fXMKSYcL6ub+HCRv3P
    U+rQeqWlpbGxsbu5sbGzur+/wsLCwcPDwsjKz9jVx9TV2Obl5+bo7/Hx8PPz8fP09vf39vn59/z8
    +vz8+/r9//z8/P39/Pz8/f///fz+/////v///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
    AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5
    BAEKAGQAIf8LSW1hZ2VNYWdpY2sKZ2FtbWE9MC40NQAsAAAAABAAEAAAB6CAZIKDAwEHg4iJZAAA
    BwyKig8IEAoAkIgWUUsTlpeCLkJDIwaegkVGSB4NpRxXU2FOCZ2KAEpjX11VFAADkBhWYl5eYk8O
    BLRJY1lbw2IXAQKJC01jWFpeYGMaANGILERUXtdjRxECEoMvPkErFVJjYlw7MCk1gy1APTwmUGNj
    TCdu5MARQ5CKGTZ+yNjQIUOBDzpooEgUggSIRCVEDAoEADs="""

        ## put the images in an instance object (self.) so they aren't destroyed
        ## when the function exits and can be used anywhere in the class
        for photo in (ladybug_gif_b64, grape_gif, house, clock, smiley):
           self.photos.append(tk.PhotoImage(data=photo))

root=tk.Tk()
root.geometry("+50+50")
CI=ChangeImage(root)
root.mainloop()

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM