Welcome screen added

This commit is contained in:
Profitroll 2023-01-22 20:06:55 +01:00
parent 1be317898f
commit e97c218ab3
9 changed files with 138 additions and 4 deletions

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.3 KiB

After

Width:  |  Height:  |  Size: 4.2 KiB

BIN
assets/welcome.gif Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

View File

@ -10,6 +10,7 @@ from classes.frames.devices import FrameDevices
from classes.frames.saves import FrameSaves
from classes.frames.settings import FrameSettings
from classes.frames.errors import FrameErrorConnection, FrameErrorSavesFolder, FrameErrorUnconfigured
from classes.toplevel.welcome import ToplevelWelcome
from modules.theme_titlebar import theme_title_bar
from modules.utils import configGet, get_string_mode, use_dark_mode
@ -92,6 +93,10 @@ class App(ThemedTk):
# self.setup_button = ttk.Button(self, text="Set up", style="Accent.TButton", width=10, command=self.open_window_config)
# self.setup_button.grid(column=1, row=1, padx=9, pady=9, sticky=N)
# return
if configGet("first_run") is True:
self.welcome_window = ToplevelWelcome(self)
self.welcome_window.grab_set()
self.frame_sidebar = ThemedFrame(self)
self.frame_sidebar.grid(column=0, row=0, columnspan=1, sticky=N+S+W+E)

View File

@ -0,0 +1,40 @@
import tkinter as tk
from PIL import Image, ImageTk
from itertools import count, cycle
class ImageLabel(tk.Label):
"""
A Label that displays images, and plays them if they are gifs
:im: A PIL Image instance or a string filename
"""
def load(self, im):
if isinstance(im, str):
im = Image.open(im)
frames = []
try:
for i in count(1):
frames.append(ImageTk.PhotoImage(im.copy()))
im.seek(i)
except EOFError:
pass
self.frames = cycle(frames)
try:
self.delay = im.info['duration']
except:
self.delay = 100
if len(frames) == 1:
self.config(image=next(self.frames))
else:
self.next_frame()
def unload(self):
self.config(image=None)
self.frames = None
def next_frame(self):
if self.frames:
self.config(image=next(self.frames))
self.after(self.delay, self.next_frame)

View File

@ -1,5 +1,4 @@
from ttkthemes import ThemedTk
from typing import Union
from tkinter import Misc
import sv_ttk
from tkinter.ttk import Frame
@ -7,7 +6,7 @@ from modules.utils import get_string_mode
class ThemedFrame(Frame):
def __init__(self, master: ThemedTk, **kwargs) -> None:
def __init__(self, master: Misc, **kwargs) -> None:
super().__init__(master, **kwargs)

View File

@ -0,0 +1,13 @@
from tkinter import Misc, Toplevel
import sv_ttk
from modules.theme_titlebar import theme_title_bar
from modules.utils import get_string_mode, use_dark_mode
class ThemedToplevel(Toplevel):
def __init__(self, master: Misc, **kwargs) -> None:
super().__init__(master, **kwargs)
sv_ttk.set_theme(get_string_mode())

View File

@ -0,0 +1,60 @@
from os import path
from tkinter import CENTER, END, E, Image, IntVar, N, S, PhotoImage, Toplevel, W, messagebox, ttk
import requests
import sv_ttk
from classes.custom.image_label import ImageLabel
from classes.custom.themed_toplevel import ThemedToplevel
from modules.logger import logger
from modules.theme_titlebar import theme_title_bar
from modules.utils import configGet, configSet, use_dark_mode
class ToplevelWelcome(ThemedToplevel):
def __init__(self, parent):
super().__init__(parent)
self.window_width = 380
self.window_height = 350
self.screen_width = self.winfo_screenwidth()
self.screen_height = self.winfo_screenheight()
self.center_x = int(self.screen_width/2 - self.window_width / 2)
self.center_y = int(self.screen_height/2 - self.window_height / 2)
self.title("Welcome to Stardew Sync")
self.geometry(f'{self.window_width}x{self.window_height}+{self.center_x}+{self.center_y}')
self.resizable(False, True)
sv_ttk.init_theme(self)
if use_dark_mode():
theme_title_bar(self, mode="dark")
self.update()
self.iconbitmap(path.join("assets", "favicon.ico"))
self.focus_set()
self.grid_columnconfigure(0, weight=1)
self.welcome_pic = ImageLabel(self)
self.welcome_pic.grid(column=0, row=0, pady=20)
self.welcome_pic.load(path.join("assets", "welcome.gif"))
self.welcome_text = ttk.Label(self, text="Welcome to Stardew Sync", font=("SunValleyBodyFont", 14))
self.welcome_text.grid(column=0, row=1, pady=10)
self.welcome_subtext = ttk.Label(self, text="This small open-source application will help you\nto synchronize your Stardew Valley save files\nbetween all your devices", justify=CENTER)
self.welcome_subtext.grid(column=0, row=2)
self.welcome_button = ttk.Button(self, text="Begin", style="Accent.TButton", width=10, command=self.acknowledged)
self.welcome_button.grid(column=0, row=3, pady=20)
def acknowledged(self):
configSet(["first_run"], False)
self.destroy()

View File

@ -4,5 +4,6 @@
"allow_self_signed": false,
"saves_location": null,
"dark_mode": false,
"dark_mode_auto": true
"dark_mode_auto": true,
"first_run": true
}

16
main.py
View File

@ -1,4 +1,20 @@
from os import path
from classes.app import App
from modules.utils import jsonSave
if not path.exists("config.json"):
jsonSave(
{
"address": None,
"apikey": None,
"allow_self_signed": False,
"saves_location": None,
"dark_mode": False,
"dark_mode_auto": True,
"first_run": True
},
"config.json"
)
if __name__ == "__main__":