From bcf8b75f62a02d2eac596caa4a9f57c6f0c65402 Mon Sep 17 00:00:00 2001 From: ataymoo Date: Fri, 5 Sep 2025 14:25:07 -0700 Subject: [PATCH 1/5] added app functionality --- README.md | 110 +++++++++++- SCE Question.app/Contents/Info.plist | 53 ++++++ SCE Question.app/Contents/MacOS/applet | Bin 0 -> 101184 bytes SCE Question.app/Contents/PkgInfo | 1 + .../Contents/Resources/Scripts/main.scpt | Bin 0 -> 2440 bytes .../Contents/Resources/applet.icns | Bin 0 -> 71867 bytes .../Contents/Resources/applet.rsrc | Bin 0 -> 362 bytes .../Contents/_CodeSignature/CodeResources | 162 ++++++++++++++++++ app_launch.log | 2 + create_clickable_app.scpt | 19 ++ launcher.applescript | 13 ++ requirements.txt | 2 + run.bat | 54 ++++++ run.py | 104 +++++++++++ run.sh | 50 ++++++ setup_for_clicking.py | 96 +++++++++++ gui_app.py => src/gui_app.py | 6 +- main.py => src/main.py | 0 18 files changed, 670 insertions(+), 2 deletions(-) create mode 100644 SCE Question.app/Contents/Info.plist create mode 100755 SCE Question.app/Contents/MacOS/applet create mode 100644 SCE Question.app/Contents/PkgInfo create mode 100644 SCE Question.app/Contents/Resources/Scripts/main.scpt create mode 100644 SCE Question.app/Contents/Resources/applet.icns create mode 100644 SCE Question.app/Contents/Resources/applet.rsrc create mode 100644 SCE Question.app/Contents/_CodeSignature/CodeResources create mode 100644 app_launch.log create mode 100644 create_clickable_app.scpt create mode 100644 launcher.applescript create mode 100644 requirements.txt create mode 100644 run.bat create mode 100644 run.py create mode 100755 run.sh create mode 100755 setup_for_clicking.py rename gui_app.py => src/gui_app.py (92%) rename main.py => src/main.py (100%) diff --git a/README.md b/README.md index ae0912e..f05ab45 100644 --- a/README.md +++ b/README.md @@ -1 +1,109 @@ -# SCEHack \ No newline at end of file +# SCE Question App + +A fun interactive application that asks "Do you like SCE?" and responds accordingly. If you answer "No", it will run a GPU stress test to show you what happens when you don't appreciate SCE! πŸ˜„ + +## Features + +- Clean, modern GUI built with tkinter +- Interactive question with Yes/No buttons +- GPU stress test using OpenCL for the "wrong" answer +- Cross-platform compatibility (Windows, macOS, Linux) + +## Requirements + +- Python 3.7 or higher +- OpenCL-compatible GPU (for the stress test) +- Virtual environment support + +## Quick Start + +### Option 1: Double-Click to Run (macOS) + +**Simply double-click `SCE Question.app` in Finder!** + +The app will automatically: +- Set up the virtual environment +- Install dependencies +- Launch the GUI + +### Option 2: Command Line (All Platforms) + +**On macOS/Linux:** +```bash +./run.sh +``` + +**On Windows:** +```bash +run.bat +``` + +**Any platform:** +```bash +python run.py +``` + +### Option 3: Manual Setup + +1. **Create and activate virtual environment:** + ```bash + python3 -m venv venv + + # On macOS/Linux: + source venv/bin/activate + + # On Windows: + venv\Scripts\activate + ``` + +2. **Install dependencies:** + ```bash + pip install -r requirements.txt + ``` + +3. **Run the application:** + ```bash + python gui_app.py + ``` + +## How It Works + +1. The application opens with a simple question: "Do you like SCE?" +2. **If you click "Yes":** The app displays "Good" and closes gracefully +3. **If you click "No":** The app displays "Wrong Answer." and launches a GPU stress test that will make your computer work hard! + +## Files Structure + +- `gui_app.py` - Main GUI application +- `main.py` - GPU stress test using OpenCL +- `SCE Question.app/` - macOS application bundle (double-click to run!) +- `run.py` - Cross-platform setup and runner script +- `run.sh` - Unix shell script for easy execution +- `run.bat` - Windows batch file for easy execution +- `requirements.txt` - Python dependencies +- `venv/` - Virtual environment (created automatically) + +## Dependencies + +- `numpy` - For numerical operations in the stress test +- `pyopencl` - For GPU computing and stress testing +- `tkinter` - For the GUI (included with Python) + +## Troubleshooting + +**OpenCL Issues:** +- Make sure you have OpenCL drivers installed for your GPU +- On macOS, OpenCL is included by default +- On Linux, install `opencl-headers` and appropriate GPU drivers +- On Windows, install GPU manufacturer's drivers + +**Virtual Environment Issues:** +- Make sure Python 3.7+ is installed +- Try running `python -m pip install --upgrade pip` before installing dependencies + +**Permission Issues on macOS/Linux:** +- Make sure the run script is executable: `chmod +x run.sh` + +## Warning + +The GPU stress test in `main.py` will run indefinitely and use significant system resources. Use Ctrl+C to stop it if needed. Don't run this on battery power or systems with cooling issues! \ No newline at end of file diff --git a/SCE Question.app/Contents/Info.plist b/SCE Question.app/Contents/Info.plist new file mode 100644 index 0000000..5a6045a --- /dev/null +++ b/SCE Question.app/Contents/Info.plist @@ -0,0 +1,53 @@ + + + + + CFBundleAllowMixedLocalizations + + CFBundleDevelopmentRegion + en + CFBundleExecutable + applet + CFBundleIconFile + applet + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + SCE Question + CFBundlePackageType + APPL + CFBundleSignature + aplt + LSMinimumSystemVersionByArchitecture + + x86_64 + 10.6 + + LSRequiresCarbon + + NSAppleEventsUsageDescription + This script needs to control other applications to run. + NSAppleMusicUsageDescription + This script needs access to your music to run. + NSCalendarsUsageDescription + This script needs access to your calendars to run. + NSCameraUsageDescription + This script needs access to your camera to run. + NSContactsUsageDescription + This script needs access to your contacts to run. + NSHomeKitUsageDescription + This script needs access to your HomeKit Home to run. + NSMicrophoneUsageDescription + This script needs access to your microphone to run. + NSPhotoLibraryUsageDescription + This script needs access to your photos to run. + NSRemindersUsageDescription + This script needs access to your reminders to run. + NSSiriUsageDescription + This script needs access to Siri to run. + NSSystemAdministrationUsageDescription + This script needs access to administer this system to run. + OSAAppletShowStartupScreen + + + diff --git a/SCE Question.app/Contents/MacOS/applet b/SCE Question.app/Contents/MacOS/applet new file mode 100755 index 0000000000000000000000000000000000000000..7c4c093d61ea89385f58b83e2295011fc8c41ebf GIT binary patch literal 101184 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 EZ;uohLI3~& literal 0 HcmV?d00001 diff --git a/SCE Question.app/Contents/PkgInfo b/SCE Question.app/Contents/PkgInfo new file mode 100644 index 0000000..3253614 --- /dev/null +++ b/SCE Question.app/Contents/PkgInfo @@ -0,0 +1 @@ +APPLaplt \ No newline at end of file diff --git a/SCE Question.app/Contents/Resources/Scripts/main.scpt b/SCE Question.app/Contents/Resources/Scripts/main.scpt new file mode 100644 index 0000000000000000000000000000000000000000..7dd4b25a998a5853196c9afb2263c0e4b499af8a GIT binary patch literal 2440 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 Zhadx8W1U(p$H(r@-gm&S@OCr={XZGNphN%w literal 0 HcmV?d00001 diff --git a/SCE Question.app/Contents/Resources/applet.rsrc b/SCE Question.app/Contents/Resources/applet.rsrc new file mode 100644 index 0000000000000000000000000000000000000000..cf2473fd91333e5306d6c4d04200303d7c25b0fa GIT binary patch literal 362 zcmZQzU}RumU{nDTAnXRjBMnG7;PWvPND?)SxPc;KAYmC`crg|y7gqt + + + + files + + Resources/Scripts/main.scpt + + jCUmny8CJJuGm4Lz3Fag/Ny8q+M= + + Resources/applet.icns + + sINd6lbiqHD5dL8c6u79cFvVXhw= + + Resources/applet.rsrc + + ar5xmDs9mPpaINVXiVlVqUCB8ao= + + + files2 + + Resources/Scripts/main.scpt + + hash + + jCUmny8CJJuGm4Lz3Fag/Ny8q+M= + + hash2 + + 7HdlX38WbikegIoy1CLrqZkHb8efHPMXwzmyOqlsoyc= + + + Resources/applet.icns + + hash + + sINd6lbiqHD5dL8c6u79cFvVXhw= + + hash2 + + J7weZ6vlnv9r32tS5HFcyuPXl2StdDnfepLxAixlryk= + + + Resources/applet.rsrc + + hash + + ar5xmDs9mPpaINVXiVlVqUCB8ao= + + hash2 + + NV2dNLwgykV7aWfTBywUILBA9Lidl7F51PrkQw77SbM= + + + + rules + + ^Resources/ + + ^Resources/.*\.lproj/ + + optional + + weight + 1000 + + ^Resources/.*\.lproj/locversion.plist$ + + omit + + weight + 1100 + + ^Resources/Base\.lproj/ + + weight + 1010 + + ^version.plist$ + + + rules2 + + .*\.dSYM($|/) + + weight + 11 + + ^(.*/)?\.DS_Store$ + + omit + + weight + 2000 + + ^(Frameworks|SharedFrameworks|PlugIns|Plug-ins|XPCServices|Helpers|MacOS|Library/(Automator|Spotlight|LoginItems))/ + + nested + + weight + 10 + + ^.* + + ^Info\.plist$ + + omit + + weight + 20 + + ^PkgInfo$ + + omit + + weight + 20 + + ^Resources/ + + weight + 20 + + ^Resources/.*\.lproj/ + + optional + + weight + 1000 + + ^Resources/.*\.lproj/locversion.plist$ + + omit + + weight + 1100 + + ^Resources/Base\.lproj/ + + weight + 1010 + + ^[^/]+$ + + nested + + weight + 10 + + ^embedded\.provisionprofile$ + + weight + 20 + + ^version\.plist$ + + weight + 20 + + + + diff --git a/app_launch.log b/app_launch.log new file mode 100644 index 0000000..e7ac227 --- /dev/null +++ b/app_launch.log @@ -0,0 +1,2 @@ +Fri Sep 5 14:09:27 PDT 2025: Setup script completed successfully +Fri Sep 5 14:09:27 PDT 2025: Application finished diff --git a/create_clickable_app.scpt b/create_clickable_app.scpt new file mode 100644 index 0000000..dc38a34 --- /dev/null +++ b/create_clickable_app.scpt @@ -0,0 +1,19 @@ +-- AppleScript to create a clickable app for SCE Question +-- This script creates an AppleScript application that can be double-clicked + +tell application "Script Editor" + set appScript to "-- SCE Question App Launcher +on run + set scriptPath to (path to me as string) + set scriptFolder to do shell script \"dirname \" & quoted form of POSIX path of scriptPath + + tell application \"Terminal\" + activate + do script \"cd \" & quoted form of scriptFolder & \" && python run.py\" + end tell +end run" + + set newDoc to make new document with properties {text:appScript} + save newDoc in file ((path to desktop as string) & \"SCE Question.app\") as Β«class scptΒ» + close newDoc +end tell diff --git a/launcher.applescript b/launcher.applescript new file mode 100644 index 0000000..c616450 --- /dev/null +++ b/launcher.applescript @@ -0,0 +1,13 @@ +-- SCE Question App Launcher +on run + set scriptPath to (path to me as string) + set scriptFolder to do shell script "dirname " & quoted form of POSIX path of scriptPath + + try + -- Run the Python script directly without showing Terminal + do shell script "cd " & quoted form of scriptFolder & " && /usr/bin/python3 run.py > /dev/null 2>&1 &" + + on error errMsg + display dialog "Error launching SCE Question App: " & errMsg buttons {"OK"} default button "OK" + end try +end run \ No newline at end of file diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..73a4477 --- /dev/null +++ b/requirements.txt @@ -0,0 +1,2 @@ +numpy>=1.21.0 +pyopencl>=2022.1 diff --git a/run.bat b/run.bat new file mode 100644 index 0000000..b86ba47 --- /dev/null +++ b/run.bat @@ -0,0 +1,54 @@ +@echo off +REM SCE Question App Runner Script for Windows + +echo ================================================== +echo SCE Question App Setup ^& Runner +echo ================================================== + +REM Change to script directory +cd /d "%~dp0" + +REM Check if Python is available +python --version >nul 2>&1 +if %errorlevel% neq 0 ( + echo Error: Python is required but not installed + pause + exit /b 1 +) + +echo βœ“ Python detected + +REM Create virtual environment if it doesn't exist +if not exist "venv" ( + echo Creating virtual environment... + python -m venv venv + if %errorlevel% neq 0 ( + echo Error: Failed to create virtual environment + pause + exit /b 1 + ) + echo βœ“ Virtual environment created +) else ( + echo βœ“ Virtual environment found +) + +REM Activate virtual environment and install dependencies +echo Installing dependencies... +call venv\Scripts\activate.bat +pip install -r requirements.txt +if %errorlevel% neq 0 ( + echo Error: Failed to install dependencies + pause + exit /b 1 +) +echo βœ“ Dependencies installed successfully + +echo. +echo ================================================== +echo Setup complete! Starting application... +echo ================================================== + +REM Run the application +python src/gui_app.py + +pause diff --git a/run.py b/run.py new file mode 100644 index 0000000..97425d0 --- /dev/null +++ b/run.py @@ -0,0 +1,104 @@ +#!/usr/bin/env python3 +""" +SCE Question App Runner +This script sets up and runs the SCE Question application. +""" + +import os +import sys +import subprocess +import platform + +def check_python_version(): + """Check if Python version is compatible""" + if sys.version_info < (3, 7): + print("Error: Python 3.7 or higher is required") + sys.exit(1) + print(f"βœ“ Python {sys.version.split()[0]} detected") + +def check_virtual_environment(): + """Check if virtual environment exists and activate it""" + venv_path = os.path.join(os.path.dirname(__file__), 'venv') + + if os.path.exists(venv_path): + print("βœ“ Virtual environment found") + return True + else: + print("Creating virtual environment...") + try: + subprocess.run([sys.executable, '-m', 'venv', 'venv'], check=True) + print("βœ“ Virtual environment created") + return True + except subprocess.CalledProcessError: + print("Error: Failed to create virtual environment") + return False + +def install_dependencies(): + """Install required dependencies""" + print("Installing dependencies...") + + # Get the appropriate pip executable + if platform.system() == "Windows": + pip_executable = os.path.join('venv', 'Scripts', 'pip') + else: + pip_executable = os.path.join('venv', 'bin', 'pip') + + try: + subprocess.run([pip_executable, 'install', '-r', 'requirements.txt'], check=True) + print("βœ“ Dependencies installed successfully") + return True + except subprocess.CalledProcessError: + print("Error: Failed to install dependencies") + return False + +def run_application(): + """Run the GUI application""" + print("Starting SCE Question App...") + + # Get the appropriate python executable + if platform.system() == "Windows": + python_executable = os.path.join('venv', 'Scripts', 'python') + else: + python_executable = os.path.join('venv', 'bin', 'python') + + try: + subprocess.run([python_executable, os.path.join('src', 'gui_app.py')], check=True) + except subprocess.CalledProcessError: + print("Error: Failed to run the application") + return False + except KeyboardInterrupt: + print("\nApplication stopped by user") + return True + + return True + +def main(): + """Main setup and run function""" + print("=" * 50) + print("SCE Question App Setup & Runner") + print("=" * 50) + + # Change to script directory + script_dir = os.path.dirname(os.path.abspath(__file__)) + os.chdir(script_dir) + + # Check Python version + check_python_version() + + # Setup virtual environment + if not check_virtual_environment(): + sys.exit(1) + + # Install dependencies + if not install_dependencies(): + sys.exit(1) + + print("\n" + "=" * 50) + print("Setup complete! Starting application...") + print("=" * 50) + + # Run the application + run_application() + +if __name__ == "__main__": + main() diff --git a/run.sh b/run.sh new file mode 100755 index 0000000..221ecba --- /dev/null +++ b/run.sh @@ -0,0 +1,50 @@ +#!/bin/bash + +# SCE Question App Runner Script +# This script sets up and runs the SCE Question application on Unix-like systems + +echo "==================================================" +echo "SCE Question App Setup & Runner" +echo "==================================================" + +# Change to script directory +cd "$(dirname "$0")" + +# Check if Python 3 is available +if ! command -v python3 &> /dev/null; then + echo "Error: Python 3 is required but not installed" + exit 1 +fi + +echo "βœ“ Python 3 detected" + +# Create virtual environment if it doesn't exist +if [ ! -d "venv" ]; then + echo "Creating virtual environment..." + python3 -m venv venv + if [ $? -ne 0 ]; then + echo "Error: Failed to create virtual environment" + exit 1 + fi + echo "βœ“ Virtual environment created" +else + echo "βœ“ Virtual environment found" +fi + +# Activate virtual environment and install dependencies +echo "Installing dependencies..." +source venv/bin/activate +pip install -r requirements.txt +if [ $? -ne 0 ]; then + echo "Error: Failed to install dependencies" + exit 1 +fi +echo "βœ“ Dependencies installed successfully" + +echo "" +echo "==================================================" +echo "Setup complete! Starting application..." +echo "==================================================" + +# Run the application +python src/gui_app.py diff --git a/setup_for_clicking.py b/setup_for_clicking.py new file mode 100755 index 0000000..d6f6a4d --- /dev/null +++ b/setup_for_clicking.py @@ -0,0 +1,96 @@ +#!/usr/bin/env python3 +""" +One-time setup script for SCE Question App +Run this once to set up everything needed for double-clicking the app. +""" + +import os +import sys +import subprocess +import platform + +def main(): + print("=" * 60) + print("SCE Question App - One-Time Setup") + print("=" * 60) + print("This will set up everything needed to double-click the app!") + print() + + # Change to script directory + script_dir = os.path.dirname(os.path.abspath(__file__)) + os.chdir(script_dir) + + # Check Python version + if sys.version_info < (3, 7): + print("❌ Error: Python 3.7 or higher is required") + print(f" You have: Python {sys.version.split()[0]}") + sys.exit(1) + + print(f"βœ… Python {sys.version.split()[0]} detected") + + # Create virtual environment + venv_path = 'venv' + if os.path.exists(venv_path): + print("βœ… Virtual environment already exists") + else: + print("πŸ”§ Creating virtual environment...") + try: + subprocess.run([sys.executable, '-m', 'venv', 'venv'], check=True) + print("βœ… Virtual environment created") + except subprocess.CalledProcessError: + print("❌ Failed to create virtual environment") + sys.exit(1) + + # Install dependencies + print("πŸ”§ Installing dependencies...") + + # Get the appropriate pip executable + if platform.system() == "Windows": + pip_executable = os.path.join('venv', 'Scripts', 'pip') + else: + pip_executable = os.path.join('venv', 'bin', 'pip') + + try: + subprocess.run([pip_executable, 'install', '-r', 'requirements.txt'], + check=True, capture_output=True, text=True) + print("βœ… Dependencies installed successfully") + except subprocess.CalledProcessError as e: + print("❌ Failed to install dependencies") + print(f" Error: {e.stderr}") + sys.exit(1) + + # Test that everything works + print("πŸ§ͺ Testing installation...") + + # Get the appropriate python executable + if platform.system() == "Windows": + python_executable = os.path.join('venv', 'Scripts', 'python') + else: + python_executable = os.path.join('venv', 'bin', 'python') + + try: + result = subprocess.run([python_executable, '-c', 'import numpy, pyopencl; print("All imports successful!")'], + capture_output=True, text=True, check=True) + print("βœ… All dependencies working correctly") + except subprocess.CalledProcessError as e: + print("⚠️ Dependencies installed but there might be issues:") + print(f" {e.stderr}") + print(" The app might still work - try double-clicking it!") + + print() + print("=" * 60) + print("πŸŽ‰ Setup Complete!") + print("=" * 60) + + if platform.system() == "Darwin": # macOS + print("You can now double-click 'SCE Question.app' to run the app!") + elif platform.system() == "Windows": + print("You can now double-click 'run.bat' to run the app!") + else: + print("You can now run './run.sh' to start the app!") + + print() + print("If you encounter any issues, check the 'app_launch.log' file for details.") + +if __name__ == "__main__": + main() diff --git a/gui_app.py b/src/gui_app.py similarity index 92% rename from gui_app.py rename to src/gui_app.py index 54e6ec4..69b8e30 100644 --- a/gui_app.py +++ b/src/gui_app.py @@ -2,6 +2,7 @@ from tkinter import messagebox import subprocess import sys +import os class SCEQuestionApp: def __init__(self, root): @@ -94,7 +95,10 @@ def quit_and_run_main(self): """Quit the GUI and run main.py""" self.root.quit() try: - subprocess.Popen([sys.executable, "main.py"]) + # Get the directory where this script is located + script_dir = os.path.dirname(os.path.abspath(__file__)) + main_py_path = os.path.join(script_dir, "main.py") + subprocess.Popen([sys.executable, main_py_path]) except Exception as e: print(f"Error running main.py: {e}") diff --git a/main.py b/src/main.py similarity index 100% rename from main.py rename to src/main.py From a9a8a01d4fb71cfaa3dfb518eeaf49be07d8189a Mon Sep 17 00:00:00 2001 From: ataymoo Date: Fri, 5 Sep 2025 14:29:16 -0700 Subject: [PATCH 2/5] removed window terminal --- run.bat | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/run.bat b/run.bat index b86ba47..b66d75b 100644 --- a/run.bat +++ b/run.bat @@ -48,7 +48,10 @@ echo ================================================== echo Setup complete! Starting application... echo ================================================== -REM Run the application -python src/gui_app.py +REM Run the application in background and close terminal +echo Starting GUI application... +start "" python src/gui_app.py -pause +REM Wait a moment for the app to start, then close this window +timeout /t 2 /nobreak >nul +exit From 8d6fb6bc5ba48b08b584bf2d5d023097c6e08639 Mon Sep 17 00:00:00 2001 From: ataymoo Date: Fri, 5 Sep 2025 14:31:24 -0700 Subject: [PATCH 3/5] fixed --- run.bat | 48 +++++++++++++++++------------------------------- 1 file changed, 17 insertions(+), 31 deletions(-) diff --git a/run.bat b/run.bat index b66d75b..7de0502 100644 --- a/run.bat +++ b/run.bat @@ -1,9 +1,14 @@ @echo off REM SCE Question App Runner Script for Windows -echo ================================================== -echo SCE Question App Setup ^& Runner -echo ================================================== +REM Hide the console window by creating a VBS script to run this batch file minimized +if "%1" neq "hidden" ( + echo Set objShell = CreateObject("WScript.Shell") > temp_run_hidden.vbs + echo objShell.Run "cmd /c ""%~f0"" hidden", 0, False >> temp_run_hidden.vbs + cscript //nologo temp_run_hidden.vbs + del temp_run_hidden.vbs + exit +) REM Change to script directory cd /d "%~dp0" @@ -11,47 +16,28 @@ cd /d "%~dp0" REM Check if Python is available python --version >nul 2>&1 if %errorlevel% neq 0 ( - echo Error: Python is required but not installed - pause + msg * "Error: Python is required but not installed" exit /b 1 ) -echo βœ“ Python detected - REM Create virtual environment if it doesn't exist if not exist "venv" ( - echo Creating virtual environment... - python -m venv venv + python -m venv venv >nul 2>&1 if %errorlevel% neq 0 ( - echo Error: Failed to create virtual environment - pause + msg * "Error: Failed to create virtual environment" exit /b 1 ) - echo βœ“ Virtual environment created -) else ( - echo βœ“ Virtual environment found ) -REM Activate virtual environment and install dependencies -echo Installing dependencies... +REM Activate virtual environment and install dependencies silently call venv\Scripts\activate.bat -pip install -r requirements.txt +pip install -r requirements.txt >nul 2>&1 if %errorlevel% neq 0 ( - echo Error: Failed to install dependencies - pause + msg * "Error: Failed to install dependencies" exit /b 1 ) -echo βœ“ Dependencies installed successfully - -echo. -echo ================================================== -echo Setup complete! Starting application... -echo ================================================== -REM Run the application in background and close terminal -echo Starting GUI application... -start "" python src/gui_app.py +REM Run the GUI application +python src/gui_app.py -REM Wait a moment for the app to start, then close this window -timeout /t 2 /nobreak >nul -exit +REM Script ends here - no terminal window was ever visible From 7d26f5510019a06a70dbee872564635c3d7fff4a Mon Sep 17 00:00:00 2001 From: ataymoo Date: Fri, 5 Sep 2025 14:34:17 -0700 Subject: [PATCH 4/5] revert --- run.bat | 43 +++++++++++++++++++++++++++---------------- 1 file changed, 27 insertions(+), 16 deletions(-) diff --git a/run.bat b/run.bat index 7de0502..b86ba47 100644 --- a/run.bat +++ b/run.bat @@ -1,14 +1,9 @@ @echo off REM SCE Question App Runner Script for Windows -REM Hide the console window by creating a VBS script to run this batch file minimized -if "%1" neq "hidden" ( - echo Set objShell = CreateObject("WScript.Shell") > temp_run_hidden.vbs - echo objShell.Run "cmd /c ""%~f0"" hidden", 0, False >> temp_run_hidden.vbs - cscript //nologo temp_run_hidden.vbs - del temp_run_hidden.vbs - exit -) +echo ================================================== +echo SCE Question App Setup ^& Runner +echo ================================================== REM Change to script directory cd /d "%~dp0" @@ -16,28 +11,44 @@ cd /d "%~dp0" REM Check if Python is available python --version >nul 2>&1 if %errorlevel% neq 0 ( - msg * "Error: Python is required but not installed" + echo Error: Python is required but not installed + pause exit /b 1 ) +echo βœ“ Python detected + REM Create virtual environment if it doesn't exist if not exist "venv" ( - python -m venv venv >nul 2>&1 + echo Creating virtual environment... + python -m venv venv if %errorlevel% neq 0 ( - msg * "Error: Failed to create virtual environment" + echo Error: Failed to create virtual environment + pause exit /b 1 ) + echo βœ“ Virtual environment created +) else ( + echo βœ“ Virtual environment found ) -REM Activate virtual environment and install dependencies silently +REM Activate virtual environment and install dependencies +echo Installing dependencies... call venv\Scripts\activate.bat -pip install -r requirements.txt >nul 2>&1 +pip install -r requirements.txt if %errorlevel% neq 0 ( - msg * "Error: Failed to install dependencies" + echo Error: Failed to install dependencies + pause exit /b 1 ) +echo βœ“ Dependencies installed successfully + +echo. +echo ================================================== +echo Setup complete! Starting application... +echo ================================================== -REM Run the GUI application +REM Run the application python src/gui_app.py -REM Script ends here - no terminal window was ever visible +pause From 189ba6ef9a347a7d4cfc1212b52b5287b900d55e Mon Sep 17 00:00:00 2001 From: ataymoo Date: Fri, 5 Sep 2025 14:39:07 -0700 Subject: [PATCH 5/5] fixed bat --- run.bat | 12 ++++-- run_windows_alt.bat | 95 +++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 104 insertions(+), 3 deletions(-) create mode 100644 run_windows_alt.bat diff --git a/run.bat b/run.bat index b86ba47..3627e3f 100644 --- a/run.bat +++ b/run.bat @@ -35,7 +35,13 @@ if not exist "venv" ( REM Activate virtual environment and install dependencies echo Installing dependencies... call venv\Scripts\activate.bat -pip install -r requirements.txt +if %errorlevel% neq 0 ( + echo Error: Failed to activate virtual environment + pause + exit /b 1 +) + +venv\Scripts\pip.exe install -r requirements.txt if %errorlevel% neq 0 ( echo Error: Failed to install dependencies pause @@ -48,7 +54,7 @@ echo ================================================== echo Setup complete! Starting application... echo ================================================== -REM Run the application -python src/gui_app.py +REM Run the application using the virtual environment's Python +venv\Scripts\python.exe src\gui_app.py pause diff --git a/run_windows_alt.bat b/run_windows_alt.bat new file mode 100644 index 0000000..4a5d763 --- /dev/null +++ b/run_windows_alt.bat @@ -0,0 +1,95 @@ +@echo off +REM SCE Question App Runner Script for Windows (Alternative Version) +REM This version handles more Python installation scenarios + +echo ================================================== +echo SCE Question App Setup ^& Runner (Windows) +echo ================================================== + +REM Change to script directory +cd /d "%~dp0" + +REM Try different Python commands to find a working one +set PYTHON_CMD= +python --version >nul 2>&1 +if %errorlevel% equ 0 ( + set PYTHON_CMD=python + goto :python_found +) + +python3 --version >nul 2>&1 +if %errorlevel% equ 0 ( + set PYTHON_CMD=python3 + goto :python_found +) + +py --version >nul 2>&1 +if %errorlevel% equ 0 ( + set PYTHON_CMD=py + goto :python_found +) + +echo Error: Python is required but not found +echo Please install Python from https://python.org +echo Make sure to check "Add Python to PATH" during installation +pause +exit /b 1 + +:python_found +echo βœ“ Python detected (%PYTHON_CMD%) + +REM Create virtual environment if it doesn't exist +if not exist "venv" ( + echo Creating virtual environment... + %PYTHON_CMD% -m venv venv + if %errorlevel% neq 0 ( + echo Error: Failed to create virtual environment + echo Make sure you have the full Python installation (not just from Microsoft Store) + pause + exit /b 1 + ) + echo βœ“ Virtual environment created +) else ( + echo βœ“ Virtual environment found +) + +REM Check if venv was created properly +if not exist "venv\Scripts\python.exe" ( + echo Error: Virtual environment is incomplete + echo Removing and recreating... + rmdir /s /q venv + %PYTHON_CMD% -m venv venv + if %errorlevel% neq 0 ( + echo Error: Still failed to create virtual environment + pause + exit /b 1 + ) +) + +REM Install dependencies using the virtual environment's pip +echo Installing dependencies... +venv\Scripts\python.exe -m pip install --upgrade pip +venv\Scripts\python.exe -m pip install -r requirements.txt +if %errorlevel% neq 0 ( + echo Error: Failed to install dependencies + echo This might be due to missing build tools or incompatible packages + pause + exit /b 1 +) +echo βœ“ Dependencies installed successfully + +echo. +echo ================================================== +echo Setup complete! Starting application... +echo ================================================== + +REM Run the application using the virtual environment's Python +venv\Scripts\python.exe src\gui_app.py +if %errorlevel% neq 0 ( + echo Error: Application failed to start + echo Check the error messages above for details +) + +echo. +echo Application finished. Press any key to close this window. +pause