Python получить изображение и показать без записи в файлы? - PullRequest
0 голосов
/ 03 октября 2019

Я хочу представить изображения на весь экран с Python. Я меняю изображения из приложения IOS с использованием Firebase. Затем в соответствии с этим изменением я хочу изменить картину, которую я представляю.

from tkinter import *
from tkinter import ttk
from PIL import Image, ImageTk
import os
import time
import firebase_admin
import google.cloud
from firebase_admin import credentials, firestore
import os
import requests
import threading

os.chdir("/Users/me/Documents/my_workspace/python/fullscreen")
cred = credentials.Certificate("./firebaseCred.json")
app=firebase_admin.initialize_app(cred)
store=firestore.client
store = firestore.client()
doc_ref = store.collection(u'lstPic')
data = [] 

view = Tk() # tkinter window
view.title("Title")
view.geometry('600x600')
view.attributes("-fullscreen",True) #tkinter full screen

#code below is for full screen view of image (I put some part from ready codes because I don't have much experience in python)

def resize_image(event):
    new_width = event.width
    new_height = event.height
    image = copy_of_image.resize((new_width, new_height))
    photo = ImageTk.PhotoImage(image)
    label.config(image = photo)
    label.image = photo #avoid garbage collection
os.chdir("/Users/me/Documents/my_workspace/python/fullscreen")
image = Image.open('add.png')
copy_of_image = image.copy()
photo = ImageTk.PhotoImage(image)
label = ttk.Label(view, image = photo)
label.bind('<Configure>', resize_image)
label.pack(fill=BOTH, expand = YES)

Эти коды выше подходят для отображения изображения в файлах. Чем я проверяю URL, если я изменил изображение,

def checkURL():
    print("I check url")
    docs = doc_ref.stream()
    for doc in docs:
        data.append(doc.to_dict())
        ##print(doc.to_dict())
    print(data[0])
    tempStrArr=str(data[0]).split('\'')
    print(tempStrArr[3])
    if TRUE:
        with open('add.png', 'wb') as handle:
            response = requests.get(tempStrArr[3], stream=True)
            if not response.ok:
                print(response)
            for block in response.iter_content(1024):
                if not block:
                    break
                handle.write(block)

, если URL отличается от предыдущего, я загружаю его. Но я не могу заставить его сделать это, не загружая изображение. С просто потоковым? Я хочу получить его и изменить вид в окне tkinter. Здесь начинаются все проблемы.

def changePicture():
    print("I change picture")
    image2 = Image.open('add.png')
    copy_of_image = image2.copy()
    photo = ImageTk.PhotoImage(image2)
    label = ttk.Label(view, image = photo)
    label.image=image2
    label.pack()
    view.update()

В конце у меня есть

timer = threading.Timer(5.0, checkURL) 
timer.start()
view.mainloop()

Я использую таймеры, чтобы сделать его непрерывным. Проблема, с которой я сталкиваюсь, заключается в том, что tkinter не обновляет изображение. Я могу загружать изображения в файлы, но, как я уже сказал, Tkinter не применяет изменения. Я знаю, это как метод опроса. Ребята, я открыт для любого предложения. Если вы предложите какое-либо решение типа прерывания, я был бы признателен. Спасибо за вашу помощь в Advence.

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