diff --git a/app_icon.ico b/app_icon.ico new file mode 100644 index 0000000..b8a7cb4 Binary files /dev/null and b/app_icon.ico differ diff --git a/app_icon.png b/app_icon.png new file mode 100644 index 0000000..6eaea0b Binary files /dev/null and b/app_icon.png differ diff --git a/build_app.py b/build_app.py index 914b95c..683fb47 100644 --- a/build_app.py +++ b/build_app.py @@ -19,11 +19,16 @@ def build(): system = platform.system() print(f"Detected OS: {system}") + # Determine separator for --add-data + sep = ";" if system == "Windows" else ":" + + # Base command base_cmd = [ sys.executable, "-m", "PyInstaller", "--onefile", "--windowed", "--paths", "src", + f"--add-data=app_icon.png{sep}.", "src/main.py" ] @@ -31,6 +36,8 @@ def build(): name = "TeletextEditor_Linux" elif system == "Windows": name = "TeletextEditor_Windows.exe" + # Add icon for Windows executable + base_cmd.append("--icon=app_icon.ico") else: print(f"Unsupported platform: {system}") return @@ -57,4 +64,4 @@ def build(): if __name__ == "__main__": clean_build_dirs() - build() + build() \ No newline at end of file diff --git a/convert_icon.py b/convert_icon.py new file mode 100644 index 0000000..67dfbee --- /dev/null +++ b/convert_icon.py @@ -0,0 +1,17 @@ +from PIL import Image +import os + +def convert_to_ico(png_path, ico_path): + if not os.path.exists(png_path): + print(f"Error: {png_path} not found.") + return + + try: + img = Image.open(png_path) + img.save(ico_path, format='ICO', sizes=[(256, 256), (128, 128), (64, 64), (48, 48), (32, 32), (16, 16)]) + print(f"Successfully converted {png_path} to {ico_path}") + except Exception as e: + print(f"Error converting image: {e}") + +if __name__ == "__main__": + convert_to_ico("app_icon.png", "app_icon.ico") diff --git a/src/main.py b/src/main.py index 63d38e7..93d3aa6 100644 --- a/src/main.py +++ b/src/main.py @@ -1,10 +1,28 @@ import sys +import os from PyQt6.QtWidgets import QApplication +from PyQt6.QtGui import QIcon from teletext.ui import MainWindow +def resource_path(relative_path): + """ Get absolute path to resource, works for dev and for PyInstaller """ + try: + # PyInstaller creates a temp folder and stores path in _MEIPASS + base_path = sys._MEIPASS + except Exception: + base_path = os.path.abspath(".") + + return os.path.join(base_path, relative_path) + def main(): app = QApplication(sys.argv) + + # Set App Icon + icon_path = resource_path("app_icon.png") + if os.path.exists(icon_path): + app.setWindowIcon(QIcon(icon_path)) + window = MainWindow() window.show() sys.exit(app.exec())