Привет, Soutcast и добро пожаловать в StackOverflow.
Используйте Widget.after
-Метод (http://effbot.org/tkinterbook/widget.htm#Tkinter.Widget.after-method) вместо while
-петля. Если вы снова вызываете after
внутри обратного вызова, выможет достичь чего-то похожего на while True
.
И вот почему:
Приложение на основе графического интерфейса ведет себя иначе, чем консольное приложение, так как оно должно реагировать на ввод пользователя.для обработки пользовательского ввода tkinter блокирует поток, в котором вы вызываете Widget.mainloop
, для обработки таких событий, как щелчки по кнопкам и т. д., пока окно не закроется.
Функция after
может сообщить выполненному циклу событий выполнитьданная функция через заданный промежуток времени.
Редактировать в соответствии с запросом Soutcast:
from tkinter import *
import tkinter
from PIL import Image
from PIL import ImageTk
import os
root = Tk()
b = Button(root,image=photoImg, width=500)
b.pack()
def update_image():
os.system("sudo idevicescreenshot test.jpg | sudo tee /proc/sys/vm/drop_caches >/dev/null 2>&1")
width = 500
height = 700
img = Image.open("/Desktop/test.jpg")
img = img.resize((width,height), Image.ANTIALIAS)
photoImg = ImageTk.PhotoImage(img)
os.system("rm -rf /Desktop/test.jpg")
b['image'] = photoImg
root.after(1000, update_image)
root.after(1, update_image)
root.mainloop()