Невозможно создать изображение из URL с помощью pypng - PullRequest
0 голосов
/ 12 марта 2019

Я очень новичок в pypng, и с самим python я работаю над погодной api-программой, которая должна получить изображение с openweathermap.org. Я гуглил в течение нескольких часов и, похоже, не могу найти решение для ошибки, которую я получаю. Код:

import tkinter
import io
from tkinter import font
import tkinter as tk
import time
import urllib.request
import json
import socket
from threading import Thread
import base64
import png


socket.getaddrinfo('localhost', 8080)


class Window(tk.Frame):
    def __init__(self, master=None):
        tk.Frame.__init__(self, master)               
        self.master = master

def update_timeText():
    current = time.strftime("%H:%M")
    seconds = time.strftime(":%S")
    currentDate=time.strftime("%a %e %B, %Y")
    timeText1.configure(text=current, fg='white', background='black')
    timeText1.grid(row=0,column=0, sticky='NW', padx=15, pady=15)
    timeText2.configure(text=seconds, fg='white', background='black')
    timeText2.grid(row=0, column=1, pady=17, sticky='NW')
    Date.configure(text=currentDate, fg='white', background='black')
    Date.grid(row=0, column=0, columnspan=3, sticky='NW', padx=20, pady=124, rowspan=2)
    root.after(1000, update_timeText)

def update_Weather():
    temperatureData = weatherData["main"]["temp"]
    temperature = int(temperatureData) , "°C"
    weather = weatherData["weather"]
    List1 = weather[0]
    pictureCode = List1["icon"]
    picUrl = "http://openweathermap.org/img/w/"+pictureCode+".png"
    pictureData = png.Reader(file = urllib.request.urlopen(picUrl))
    picturePNG = pictureData.read()
    picture = png.Writer(picturePNG)
    print(picture)
    weatherIcon.configure(image=picture)
    weatherIcon.grid(row=3)
    weatherTemperature.configure(text=temperature, fg='white', background='black')
    weatherTemperature.grid(row=3, column=2)
    root.after(100000, update_Weather)

root = tk.Tk()
root.configure(background='black')
root.title('Smart Mirror')
timeText1 = tk.Label(root, text="", font=("Opinio", 90, "bold"))
timeText2 = tk.Label(root, text="", font=("Opinio", 45, "bold"))
Date=tk.Label(root, text="", font=("Roboto Condensed", 24))
weatherAPI=urllib.request.urlopen("https://api.openweathermap.org/data/2.5/weather?q=Mostar,070&APPID=d9c3aca43db397f6c24189c7c52948f9&units=metric")
weatherData=json.load(weatherAPI)
weatherTemperature=tk.Label(root, text="", font=("Roboto Condensed", 24))
weatherIcon=tk.Label(root, image="")
Thread(target=update_Weather).start()
Thread(target=update_timeText).start()
app = Window(root)
root.mainloop()

Я получаю код значка из данных JSON и использую его для создания URL-адреса. WeatherIcon - это метка. Ошибка, которую я продолжаю получать:

png.ProtocolError: ProtocolError: width and height must be integers

Любая помощь очень ценится, большое спасибо.

1 Ответ

0 голосов
/ 12 марта 2019

Есть ли причина, по которой вы называете свой словарь списком?

    pictureCode = List["icon"]

В любом случае, вы используете pypng по определенной причине? Вы могли бы просто пойти

    import requests
    from PIL import Image
    from io import BytesIO

    #Assuming this is actually a dictionary
    picId = dict["key"]
    image_url = "http://openweathermap.org/img/w/"+picId+".png"
    r = requests.get(image_url)

    i = Image.open(BytesIO(r.content))
    i.save("weather_icon.png")

Что такое WeatherIcon? Вы действительно должны опубликовать весь свой код, так как это облегчит все остальные, пытающиеся помочь вам.

...