50 lines
1.3 KiB
Python
50 lines
1.3 KiB
Python
from typing import Optional
|
|
|
|
import gi
|
|
|
|
gi.require_version("Gtk", "3.0")
|
|
from gi.repository import GdkPixbuf, Gtk
|
|
|
|
|
|
class SpinnerImage(Gtk.Overlay):
|
|
def __init__(
|
|
self,
|
|
loading: bool = True,
|
|
image_name: str = None,
|
|
spinner_name: str = None,
|
|
image_size: int = None,
|
|
**kwargs,
|
|
):
|
|
Gtk.Overlay.__init__(self)
|
|
self.image_size = image_size
|
|
|
|
self.image = Gtk.Image(name=image_name, **kwargs)
|
|
self.add(self.image)
|
|
|
|
self.spinner = Gtk.Spinner(
|
|
name=spinner_name,
|
|
active=loading,
|
|
halign=Gtk.Align.CENTER,
|
|
valign=Gtk.Align.CENTER,
|
|
)
|
|
self.add_overlay(self.spinner)
|
|
|
|
def set_from_file(self, filename: Optional[str]):
|
|
if filename == "":
|
|
filename = None
|
|
if self.image_size is not None and filename:
|
|
pixbuf = GdkPixbuf.Pixbuf.new_from_file_at_scale(
|
|
filename, self.image_size, self.image_size, True,
|
|
)
|
|
self.image.set_from_pixbuf(pixbuf)
|
|
else:
|
|
self.image.set_from_file(filename)
|
|
|
|
def set_loading(self, loading_status: bool):
|
|
if loading_status:
|
|
self.spinner.start()
|
|
self.spinner.show()
|
|
else:
|
|
self.spinner.stop()
|
|
self.spinner.hide()
|