Home > database >  Update image button
Update image button

Time:09-16

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()

CodePudding user response:

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', '')

CodePudding user response:

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()
  • Related