From c1e5a1498a63d9d820fd476e276e7a46a22b4469 Mon Sep 17 00:00:00 2001 From: rattatwinko Date: Fri, 18 Apr 2025 18:26:20 +0200 Subject: [PATCH] Pineapple (CH2) + Added tgtg.png + Added updates.png + Added uscan.png + Logos for each credits --- PfandApplication/images/versions/tgtg.png | Bin 0 -> 11852 bytes PfandApplication/images/versions/updates.png | Bin 0 -> 25663 bytes PfandApplication/images/versions/uscan.png | Bin 0 -> 1887 bytes PfandApplication/main.py | 199 +++++++++++++------ 4 files changed, 138 insertions(+), 61 deletions(-) create mode 100644 PfandApplication/images/versions/tgtg.png create mode 100644 PfandApplication/images/versions/updates.png create mode 100644 PfandApplication/images/versions/uscan.png diff --git a/PfandApplication/images/versions/tgtg.png b/PfandApplication/images/versions/tgtg.png new file mode 100644 index 0000000000000000000000000000000000000000..eb831b2f26dd4281abe43a00df97c5c94dd766cd GIT binary patch literal 11852 zcmdsd^;gv2_w|bsML|(Qq`TowcPT9)Ej6HYcMgr9(%mK99nu2A5YnAP!w@qF3ivDAI{!q@9!Tpln4pl5C8x`sG=;d4FFiZ|7O_ZNB?$QQR7(u zmPeo8E6D>7{~HC}Wyt`*gQX%br|Y|Ny8h%Rl|sv}zwPl~d5_+`Sk}!8lU9(&#giA7 zQy_k!z@(f8tA&HxAHVcwkRT?OQ;;R;8!mK=3X}XY%u~hI$@PfolgiW=rWaSTX=7D7 zQYvtM9X+YpCeO(SRNzIZyUj5iHmhfPkfZ(NUmE}SV`{n37O8Er(Of)NTf%m&$WDYt zGEO~!J=r;2jE^|$jE@jziG+B-a1{;piL{}1Ut$ScP9bd*az{NL5|%{pQ2O8(NfgzY zGP>8+#Eu2za>p&sh91jfd{+dP+QUClf$Xuj4yQTmL;szJFH70pT)Yj2ZkU?~8r2D}f6K)KY)xDcmE!elhD!e#6)Rb$XUbpE z`Q|TzPbF@9z3A4aaeuSr7(>84)n!&b=4DvGQQ4f4c!*R2KhRx3TXtMML-W@gtR9K%juUCZM;Z;*nc@cM#Ms zFCRfl)&~G<3|?8m#P)j5V>U56&ks?-Qv!tB?6X?fK*&)j@8fRlD1wLeE8^7ZXX;1a zZ}+f9zmWkUKSDLr38MQKCBsH?v|l?<5$F3|9=07$dX$&}bBsm+kfvo%N=;|&kDJ(j z>mqVeKPjymFJFhG!U_t{B?QW2Zo@nz!ywTm8=J4FZ*EGk)r+042sV=Xv4F#?U*v%k zMbGo^5q)rKj8u}U;H*@sOz?mPeuy`v2%OqlzGSX8)jwV7=p4jK=$8>T)3;Gt)XpWC znA66^6s?$d`I;{`Az2pg1LY^`(MN%YN!-l*0(0M8QwYSqi9jDie9}*=*d*T~>H?9_ z*m;y<+YI_xifR|2v+CWhH^>*|op}gQ%jZg;GaUBwFZpmOADD#c5@RnTBI_7#MhBMe zR$3(#oBiyaNSPSyETuPo)^A2 z^tOyca#BsK^Xe6_8>dZM!Np=Y6)ElWFjJJ;q?Z2W{+{$}U?UBt9qx+%xW$;K4XjNt z-s11|y+gG)fdooOAd%jo&_rB*O!tqoK>75 z{Drm&@K!{?d!A;`G6vrRQ<*vrEN#^r(}PKteeZl5K%Q=D+8;Z*!bkokr~XIAsxQiu zB|Z#u3C&3&@eo$G&i0ULNTm9ykE zwL>_bAV;9Q&YPci5873Qu%<{Ed&bq4>pWSTBUJeI%>&+*wBDkj*6u@vXKWZFgX7?y zl<6lyaX}|KN5{rZ?D56t#q30SaLqt
    6uX2+UcNP?8`t75a8^EZs_ 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 literal 0 HcmV?d00001 diff --git a/PfandApplication/images/versions/updates.png b/PfandApplication/images/versions/updates.png new file mode 100644 index 0000000000000000000000000000000000000000..adbe2dff24015f5ac3f9c65658bc71baf3cfb75c GIT binary patch literal 25663 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 literal 0 HcmV?d00001 diff --git a/PfandApplication/main.py b/PfandApplication/main.py index 1da0bf1..b617e21 100644 --- a/PfandApplication/main.py +++ b/PfandApplication/main.py @@ -403,47 +403,92 @@ class PfandCalculator: # TGTG Credits def TGTG_credits(self): - about_tgtg = tk.Toplevel(self.root) - about_tgtg.title("Über TGTG-OrderChecker") - about_tgtg.resizable(True, True) + about_tgtg = tk.Toplevel(self.root) + about_tgtg.title("Über TGTG-OrderChecker") + about_tgtg.resizable(True, True) - about_tgtg.grid_columnconfigure(0, weight=1) - about_tgtg.grid_columnconfigure(1, weight=1) - about_tgtg.grid_rowconfigure(0, weight=1) + for col in range(2): + about_tgtg.grid_columnconfigure(col, weight=1) + about_tgtg.grid_rowconfigure(0, weight=1) - label_TGTG = tk.Label( - about_tgtg, - text=( - "PV2-PKG1 - ( PfandVersion 2 - Package 1 )\n\n" - "TooGoodToGo OrderChecker\n" - ), - padx=10, - pady=10, - justify="center", - anchor="center" - ) - label_TGTG.grid(row=0, column=0, columnspan=2, pady=10, sticky="nsew") + image_path = os.path.join(os.getcwd(), "PfandApplication", "images", "versions", "tgtg.png") - url_TGTG = "https://github.com/ZockerKatze/tgtg_orderchecker" + try: + img = Image.open(image_path).convert("RGBA") + bg_color_hex = about_tgtg.cget("bg") + bg_color_rgb = about_tgtg.winfo_rgb(bg_color_hex) + bg_color_rgba = tuple(c // 256 for c in bg_color_rgb) + (255,) - # Website button - website_button_TGTG = tk.Button(about_tgtg, text="View Repo In Browser", command=lambda: webbrowser.open(url_TGTG)) - website_button_TGTG.grid(row=1, column=0, padx=10, pady=10, sticky="ew") + blended = Image.new("RGBA", img.size, bg_color_rgba) + img = Image.alpha_composite(blended, img) + img = img.resize((100, 100), Image.Resampling.LANCZOS) - # Close button - close_button = tk.Button(about_tgtg, text="Close", command=about_tgtg.destroy) - close_button.grid(row=1, column=1, padx=10, pady=10, sticky="ew") + tgtg_img = ImageTk.PhotoImage(img) - def update_credits(self): # Credits for the Updater Application (not some update function for some credits) || Rewrote this in Version Pineapple => Inconsistency is key + # Prevent Garbage Collection ( WHY PYTHON, WHY? ) + about_tgtg.tgtg_img = tgtg_img + + img_label = tk.Label(about_tgtg, image=tgtg_img) + img_label.grid(row=0, column=0, columnspan=2, pady=(15, 5), sticky='n') + except Exception as e: + print(f"Fehler beim Laden des Bildes: {e}") + + label_TGTG = tk.Label( + about_tgtg, + text=( + "PV2-PKG1 - ( PfandVersion 2 - Package 1 )\n" + "\nTooGoodToGo OrderChecker" + ), + padx=10, + pady=10, + justify="center", + anchor="center" + ) + label_TGTG.grid(row=1, column=0, columnspan=2, sticky="nsew") + + url_TGTG = "https://github.com/ZockerKatze/tgtg_orderchecker" + + website_button = tk.Button(about_tgtg, text="Öffne Repository im Browser", command=lambda: webbrowser.open(url_TGTG)) + website_button.grid(row=2, column=0, padx=10, pady=10, sticky="ew") + + close_button = tk.Button(about_tgtg, text="Schließen", command=about_tgtg.destroy) + close_button.grid(row=2, column=1, padx=10, pady=10, sticky="ew") + + def update_credits(self): about_update = tk.Toplevel(self.root) about_update.title("Über UpdaterApp") - about_update.geometry("650x190") + about_update.geometry("650x350") - about_update.grid_columnconfigure(0, weight=1) # horizont - about_update.grid_rowconfigure(0, weight=1) # vertically - about_update.grid_rowconfigure(1, weight=0) # tight :3 (OwO) + # Grid configuration for responsiveness + about_update.grid_columnconfigure(0, weight=1) + about_update.grid_columnconfigure(1, weight=1) + about_update.grid_rowconfigure(0, weight=1) + about_update.grid_rowconfigure(1, weight=1) + about_update.grid_rowconfigure(2, weight=0) + + # Load and process image + image_path = os.path.join(os.getcwd(), "PfandApplication", "images", "versions", "updates.png") + + try: + img = Image.open(image_path).convert("RGBA") + + bg_color_hex = about_update.cget("bg") + bg_color_rgb = about_update.winfo_rgb(bg_color_hex) + bg_color_rgba = tuple(c // 256 for c in bg_color_rgb) + (255,) + + background = Image.new("RGBA", img.size, bg_color_rgba) + img = Image.alpha_composite(background, img) + img = img.resize((100, 100), Image.Resampling.LANCZOS) + update_img = ImageTk.PhotoImage(img) + + # Garbage Collection + about_update.update_img = update_img + + img_label = tk.Label(about_update, image=update_img) + img_label.grid(row=0, column=0, columnspan=2, pady=(15, 5), sticky='n') + except Exception as e: + print(f"Fehler beim Laden des Bildes: {e}") - # Text content label_update_app = tk.Label( about_update, text=( @@ -453,38 +498,70 @@ class PfandCalculator: "Nach Updates sollte die App neugestartet (oder reloaded, bei UI) werden.\n" "Beim Starten der App wird nach Updates gesucht!" ), - justify="left", anchor="center" + justify="left", + anchor="center", + wraplength=600 ) - label_update_app.grid(row=0, column=0, sticky='nsew', padx=10, pady=10) + label_update_app.grid(row=1, column=0, columnspan=2, sticky='nsew', padx=10, pady=10) - # Close button at the bottom (like u) :3 - close_button = tk.Button(about_update, text="Close", command=about_update.destroy) - close_button.grid(row=1, column=0, sticky='ew', padx=10, pady=(0, 10)) - - def µScan_credits(self, about_μScan=None, label_μScan_app=None): - about_µScan = tk.Toplevel(self.root) - about_μScan.title("Über µScan") - about_μScan.geometry("650x190") + # Buttons + url = "https://github.com/ZockerKatze/pfand_PKG" - about_μScan.grid_columnconfigure(0, weight=1) - about_μScan.grid_rowconfigure(0, weight=1) - about_μScan.grid_rowconfigure(1, weight=0) + close_button = tk.Button(about_update, text="Schließen", command=about_update.destroy) + close_button.grid(row=2, column=0, padx=10, pady=10, sticky="ew") + + open_repo_button = tk.Button(about_update, text="Öffne Update-Repository", command=lambda: webbrowser.open(url)) + open_repo_button.grid(row=2, column=1, padx=10, pady=10, sticky="ew") + + def uscan_credits(self): + about_uscan = tk.Toplevel(self.root) + about_uscan.title("Über µScan") + about_uscan.geometry("650x290") + + about_uscan.grid_columnconfigure(0, weight=1) + about_uscan.grid_rowconfigure(0, weight=1) + about_uscan.grid_rowconfigure(1, weight=0) + + image_path = os.path.join(os.getcwd(), "PfandApplication", "images", "versions", "uscan.png") + + try: + img = Image.open(image_path).convert("RGBA") + + bg_color_hex = about_uscan.cget("bg") + bg_color_rgb = about_uscan.winfo_rgb(bg_color_hex) + bg_color_rgba = tuple(c // 256 for c in bg_color_rgb) + (255,) + + background = Image.new("RGBA", img.size, bg_color_rgba) + img = Image.alpha_composite(background, img) + img = img.resize((300, 100), Image.Resampling.LANCZOS) + + uscan_img = ImageTk.PhotoImage(img) + + # Garbage Collection Prevention + about_uscan.uscan_img = uscan_img + + img_label = tk.Label(about_uscan, image=uscan_img) + img_label.grid(row=0, column=0, columnspan=2, pady=(15, 5), sticky='n') + + except Exception as e: + print(f"Fehler beim Laden des Bildes: {e}") + + label_uscan_app = tk.Label( + about_uscan, + text=( + "µScan - Der bessere Barcode Scanner\n" + "Version 1.1.0\n" + "µScan erfordert einen UI Reload (Strg+R) in der Root Anwendung\n" + "µScan ist für mehrere Barcodes gemacht, die in einer kurzen Zeit gescannt werden sollten\n" + ), + justify="left", + anchor="center" + ) + label_uscan_app.grid(row=1, column=0, sticky="nsew", padx=10, pady=10) + + close_button = tk.Button(about_uscan, text="Schließen", command=about_uscan.destroy) + close_button.grid(row=2, column=0, sticky='ew', padx=10, pady=(0, 10)) - label_µScan_app = tk.Label( - about_μScan, - text=( - "µScan - Der bessere Barcode Scanner\n" - "Version 1.1.0\n" - "µScan erfordert einen UI Reload (Strg+R) in der Root Anwendung\n" - "µScan ist für mehrere Barcodes gemacht, die in einer kurzen Zeit gescannt werden sollten\n" - ), - justify="left", anchor="center" - ) - label_μScan_app.grid(row=0, column=0, sticky="nsew", padx=10, pady=10) - - close_button = tk.Button(about_µScan, text="Close", command=about_μScan.destroy) - close_button.grid(row=1, column=0, sticky='ew', padx=10, pady=(0, 10)) - def create_menu(self): self.menubar = tk.Menu(self.root) self.root.config(menu=self.menubar) @@ -522,7 +599,7 @@ class PfandCalculator: scanner_menu.add_command(label="Scanner öffnen", command=self.open_scanner_window, accelerator="Strg+B") scanner_menu.add_separator() scanner_menu.add_command(label="Öffne µScan", command=launch_pfand_scanner, accelerator="Strg+Shift+B") #µScan - scanner_menu.add_command(label="Über µScan", command=self.µScan_credits) #µScan credits + scanner_menu.add_command(label="Über µScan", command=self.uscan_credits) #µScan credits scanner_menu.add_separator() scanner_menu.add_command(label="Barcodes Exportieren (CSV)", command=self.export_barcodes_csv, accelerator="Strg+Shift+E") @@ -1596,7 +1673,7 @@ class PfandCalculator: self.create_widgets() @staticmethod - def launch(check_for_update): + def launch(check_for_update) -> None: root = tk.Tk() app = PfandCalculator(root)