Это функция, которая создает изображение:
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](https://i.stack.imgur.com/Jb0Uf.png)
Редактировать:
Я сузил проблема. Ниже приведен код для функции воспроизведения. Когда я щелкаю гистограмму и если гистограмма становится истинной, то код работает без сбоев, но, похоже, он не работает для второго оператора, даже если у меня внутри ничего нет.
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 () выполняется только один раз