1
0
Fork 0
mirror of synced 2024-06-26 10:11:19 +12:00

Fix weird bug with images in ImageLabel

This commit is contained in:
Dummerle 2021-06-18 00:17:01 +02:00
parent e7038be33a
commit 374e8193ac
3 changed files with 12 additions and 39 deletions

View file

@ -1,13 +1,9 @@
import io
import json
import json
import logging
import os
from PIL import Image
from PIL.ImageQt import ImageQt
from PyQt5 import QtGui
from PyQt5.QtCore import pyqtSignal, QSettings, Qt, QUrl, QJsonParseError, QJsonDocument
from PyQt5.QtGui import QPixmap
from PyQt5.QtCore import pyqtSignal, QUrl, QJsonParseError, QJsonDocument
from PyQt5.QtNetwork import QNetworkAccessManager, QNetworkRequest, QNetworkReply
from PyQt5.QtWidgets import QWidget, QVBoxLayout, QLabel
@ -55,37 +51,8 @@ class GameWidget(QWidget):
logger.info(", ".join([img["type"] for img in json_info["keyImages"]]))
# print(json_info["keyImages"])
save = QSettings().value("cache_images", True, bool)
if os.path.exists(p := os.path.join(self.path, f"{json_info['title']}_wide.png")) and save:
self.image.setPixmap(QPixmap(p)
.scaled(self.width, int(self.width * 9 / 16), transformMode=Qt.SmoothTransformation))
else:
for img in json_info["keyImages"]:
if img["type"] in ["DieselStoreFrontWide", "VaultClosed"]:
if img["type"] == "VaultClosed" and self.title != "Mystery Game":
continue
self.image_request = self.manager.get(QNetworkRequest(QUrl(img["url"])))
self.image_request.finished.connect(lambda: self.image_ready(save))
break
else:
# No image found
logger.error(f"No image found for {self.title}")
self.setLayout(self.layout)
def image_ready(self, save: bool):
if self.image_request:
if self.image_request.error() == QNetworkReply.NoError:
data = self.image_request.readAll().data()
image: Image.Image = Image.open(io.BytesIO(data))
image = image.resize((self.width, int(self.width * 9 / 16)))
if save:
image.save(os.path.join(self.path, self.json_info["title"] + "_wide.png"), format="png")
pixmap = QPixmap()
pixmap.fromImage(ImageQt(image))
self.image.setPixmap(pixmap)
def mousePressEvent(self, a0: QtGui.QMouseEvent) -> None:
self.show_info.emit(self.json_info)

View file

@ -63,7 +63,6 @@ class ShopGame:
tmp.links.append(tuple((item.replace("link", ""), links[item])))
tmp.available_voice_langs = api_data["data"]["requirements"].get("languages", "Failed")
tmp.reqs = {}
print(api_data["data"]["requirements"])
for i, system in enumerate(api_data["data"]["requirements"].get("systems", [])):
try:
tmp.reqs[system["systemType"]] = {}

View file

@ -1,8 +1,8 @@
import io
import os
from logging import getLogger
from PIL import Image
from PIL.ImageQt import ImageQt
from PyQt5.QtCore import Qt, QRect, QSize, QPoint, pyqtSignal, QUrl, QSettings
from PyQt5.QtGui import QMovie, QPixmap
from PyQt5.QtNetwork import QNetworkAccessManager, QNetworkRequest, QNetworkReply
@ -13,6 +13,7 @@ from qtawesome import icon
from rare import style_path
from rare.ui.utils.pathedit import Ui_PathEdit
logger = getLogger("ExtraWidgets")
class FlowLayout(QLayout):
def __init__(self, parent=None, margin=-1, hspacing=-1, vspacing=-1):
@ -284,18 +285,24 @@ class ImageLabel(QLabel):
self.show_image()
def image_ready(self):
self.setPixmap(QPixmap())
if self.request:
if self.request.error() == QNetworkReply.NoError:
data = self.request.readAll().data()
image: Image.Image = Image.open(io.BytesIO(data))
image = image.resize((self.img_size[0], self.img_size[1]))
if QSettings().value("cache_images", True, bool):
image.save(os.path.join(self.path, self.name), format="png")
byte_array = io.BytesIO()
image.save(byte_array, format="PNG")
# pixmap = QPixmap.fromImage(ImageQt(image))
pixmap = QPixmap()
pixmap.fromImage(ImageQt(image))
pixmap.loadFromData(byte_array.getvalue())
# pixmap = QPixmap.fromImage(ImageQt.ImageQt(image))
self.setPixmap(pixmap)
else:
logger.error(self.request.errorString())
else:
return