Как обновить изображение повторно в Ткинтере - PullRequest
0 голосов
/ 22 марта 2020

Это функция, которая создает изображение:

def footgraph(self):

        load = Image.open('centertext_out.png')
        load= load.resize((500, 500), Image.ANTIALIAS)
        render = ImageTk.PhotoImage(load)
        self.img = Label( image=render)
        self.img.image = render
        self.img.place(x=150, y=5)

        self.scale = tk.Scale(self.win, variable=self.value, orient="horizontal",length = 200, 
                         from_=self.df['index'].unique().min(), to=self.df['index'].unique().max(), resolution =1,command=self.updateScaleFoot)

        self.scale.place(x=250, y = 500)
        self.stop.pack(expand='true',fill='both')
        self.stop.place(x=200, y =500)
        self.play.pack(expand='true',fill='both')
        self.play.place(x=150, y = 500)

Вот код кнопки воспроизведения, который постоянно обновляет изображение:

while True:
            self.index += 1
            #update image(centertext_out.png) and save 
            load = Image.open('centertext_out.png')
            load= load.resize((500, 500), Image.ANTIALIAS)
            render = ImageTk.PhotoImage(load)
            img = Label( image=render)
            img.image = render
            img.place(x=150, y=5)
            time.sleep(10)

Этот l oop работает нормально , Self.index постоянно обновляется. Но изображение не обновляется и экран зависает.

Редактировать: Когда я использую ползунок, новое изображение добавляется к предыдущему, как это: enter image description here

Редактировать:

Я сузил проблема. Ниже приведен код для функции воспроизведения. Когда я щелкаю гистограмму и если гистограмма становится истинной, то код работает без сбоев, но, похоже, он не работает для второго оператора, даже если у меня внутри ничего нет.

 def startanimation(self):
        self.pause = 0 
        print("pause"+ str(self.pause))

        while True:

            if self.pause == 1:
                break
            self.index = self.index +1

            print ("scale is now %s" % (self.index))
            if "bar" in self.graphtype:

                #some code


                #draw canvas
                self.fig.canvas.draw()
                self.fig.canvas.flush_events()
                time.sleep(0.2)
            if "foot" in self.graphtype:

                print("inside")

                time.sleep(0.2)

Редактировать: Изменен код согласно одному из ответов.

class Application:

    def __init__(self, master):

        self.win = master
        self.geo = self.win.geometry
        self.geo("800x800+400+400")
        self.win['bg'] = "black"
######################## ############################ некоторый код
def startanimation(self):
        self.pause = 0 
        print("pause"+ str(self.pause))
        if "foot" in self.graphtype:
            self.win.after(1,self.test)
def test(self):
            print("hi")
            self.pause = 0
            guide = pd.read_csv("guide.csv")

            print("hey")
            self.index +=1

test вызывается только один раз. эй печатается только один раз

решено: проверьте эту ссылку Python Tkinter after () выполняется только один раз

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...