Compare commits
3 Commits
33c9c3d099
...
5e1cdfb9e5
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
5e1cdfb9e5 | ||
|
|
8619debd71 | ||
|
|
184178275b |
38
LabelPrinter.spec
Normal file
38
LabelPrinter.spec
Normal file
@@ -0,0 +1,38 @@
|
|||||||
|
# -*- mode: python ; coding: utf-8 -*-
|
||||||
|
|
||||||
|
|
||||||
|
a = Analysis(
|
||||||
|
['label_printer_gui.py'],
|
||||||
|
pathex=[],
|
||||||
|
binaries=[],
|
||||||
|
datas=[],
|
||||||
|
hiddenimports=['kivy', 'kivy.core.window', 'kivy.core.text', 'kivy.core.image', 'kivy.uix.boxlayout', 'kivy.uix.gridlayout', 'kivy.uix.label', 'kivy.uix.textinput', 'kivy.uix.button', 'kivy.uix.spinner', 'kivy.uix.scrollview', 'kivy.uix.popup', 'kivy.clock', 'kivy.graphics', 'PIL', 'barcode', 'reportlab', 'print_label', 'print_label_pdf'],
|
||||||
|
hookspath=[],
|
||||||
|
hooksconfig={},
|
||||||
|
runtime_hooks=[],
|
||||||
|
excludes=[],
|
||||||
|
noarchive=False,
|
||||||
|
optimize=0,
|
||||||
|
)
|
||||||
|
pyz = PYZ(a.pure)
|
||||||
|
|
||||||
|
exe = EXE(
|
||||||
|
pyz,
|
||||||
|
a.scripts,
|
||||||
|
a.binaries,
|
||||||
|
a.datas,
|
||||||
|
[],
|
||||||
|
name='LabelPrinter',
|
||||||
|
debug=False,
|
||||||
|
bootloader_ignore_signals=False,
|
||||||
|
strip=False,
|
||||||
|
upx=True,
|
||||||
|
upx_exclude=[],
|
||||||
|
runtime_tmpdir=None,
|
||||||
|
console=False,
|
||||||
|
disable_windowed_traceback=False,
|
||||||
|
argv_emulation=False,
|
||||||
|
target_arch=None,
|
||||||
|
codesign_identity=None,
|
||||||
|
entitlements_file=None,
|
||||||
|
)
|
||||||
227
PYINSTALLER_GUIDE.md
Normal file
227
PYINSTALLER_GUIDE.md
Normal file
@@ -0,0 +1,227 @@
|
|||||||
|
# Building a Standalone EXE with PyInstaller
|
||||||
|
|
||||||
|
This guide explains how to create a standalone Windows executable (`.exe`) file that doesn't require Python to be installed.
|
||||||
|
|
||||||
|
## Quick Start (Windows)
|
||||||
|
|
||||||
|
### Prerequisites
|
||||||
|
- Python 3.11+ installed
|
||||||
|
- Virtual environment activated
|
||||||
|
- All dependencies installed
|
||||||
|
|
||||||
|
### One-Command Build
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Activate virtual environment
|
||||||
|
venv\Scripts\activate
|
||||||
|
|
||||||
|
# Build the executable
|
||||||
|
python build_exe.py
|
||||||
|
```
|
||||||
|
|
||||||
|
That's it! Your executable will be in `dist/LabelPrinter.exe`
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## What Happens During Build
|
||||||
|
|
||||||
|
1. **Analyzes your code** - Finds all imported modules
|
||||||
|
2. **Collects dependencies** - Bundles Kivy, PIL, barcode, reportlab, etc.
|
||||||
|
3. **Creates executable** - Packages everything into one `.exe` file
|
||||||
|
4. **Output**: `dist/LabelPrinter.exe` (~150-200 MB)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Detailed Build Instructions
|
||||||
|
|
||||||
|
### Step 1: Install PyInstaller
|
||||||
|
```bash
|
||||||
|
venv\Scripts\activate
|
||||||
|
pip install pyinstaller
|
||||||
|
```
|
||||||
|
|
||||||
|
### Step 2: Build Using Script
|
||||||
|
```bash
|
||||||
|
python build_exe.py
|
||||||
|
```
|
||||||
|
|
||||||
|
### Step 3: Alternative Manual Build
|
||||||
|
If the script doesn't work, use this command directly:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
pyinstaller ^
|
||||||
|
--onefile ^
|
||||||
|
--windowed ^
|
||||||
|
--name=LabelPrinter ^
|
||||||
|
--hidden-import=kivy ^
|
||||||
|
--hidden-import=kivy.core.window ^
|
||||||
|
--hidden-import=kivy.core.text ^
|
||||||
|
--hidden-import=kivy.core.image ^
|
||||||
|
--hidden-import=kivy.uix.boxlayout ^
|
||||||
|
--hidden-import=kivy.uix.gridlayout ^
|
||||||
|
--hidden-import=kivy.uix.label ^
|
||||||
|
--hidden-import=kivy.uix.textinput ^
|
||||||
|
--hidden-import=kivy.uix.button ^
|
||||||
|
--hidden-import=kivy.uix.spinner ^
|
||||||
|
--hidden-import=kivy.uix.scrollview ^
|
||||||
|
--hidden-import=kivy.uix.popup ^
|
||||||
|
--hidden-import=kivy.clock ^
|
||||||
|
--hidden-import=kivy.graphics ^
|
||||||
|
--hidden-import=PIL ^
|
||||||
|
--hidden-import=barcode ^
|
||||||
|
--hidden-import=reportlab ^
|
||||||
|
--hidden-import=print_label ^
|
||||||
|
--hidden-import=print_label_pdf ^
|
||||||
|
--collect-all=kivy ^
|
||||||
|
--collect-all=PIL ^
|
||||||
|
label_printer_gui.py
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Output Files
|
||||||
|
|
||||||
|
After building, you'll have:
|
||||||
|
|
||||||
|
```
|
||||||
|
Label-design/
|
||||||
|
├── dist/
|
||||||
|
│ └── LabelPrinter.exe ← Your standalone executable (150-200 MB)
|
||||||
|
├── build/ ← Temporary build files (can delete)
|
||||||
|
└── label_printer.spec ← PyInstaller spec file
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Running the Executable
|
||||||
|
|
||||||
|
### On Your Computer
|
||||||
|
1. Double-click `dist/LabelPrinter.exe`
|
||||||
|
2. App starts immediately (first run takes ~5 seconds)
|
||||||
|
3. Works like the Python version
|
||||||
|
|
||||||
|
### Sharing with Others
|
||||||
|
1. Copy `dist/LabelPrinter.exe` to a folder
|
||||||
|
2. Create a shortcut to it on the desktop
|
||||||
|
3. Share the folder or executable
|
||||||
|
4. **No Python installation needed on their computer!**
|
||||||
|
|
||||||
|
### Creating a Shortcut
|
||||||
|
1. Right-click `LabelPrinter.exe`
|
||||||
|
2. Send to → Desktop (create shortcut)
|
||||||
|
3. Double-click the shortcut to run
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Troubleshooting
|
||||||
|
|
||||||
|
### "Failed to build the executable"
|
||||||
|
|
||||||
|
**Solution 1**: Check Python version
|
||||||
|
```bash
|
||||||
|
python --version # Should be 3.11+
|
||||||
|
```
|
||||||
|
|
||||||
|
**Solution 2**: Update PyInstaller
|
||||||
|
```bash
|
||||||
|
pip install --upgrade pyinstaller
|
||||||
|
```
|
||||||
|
|
||||||
|
**Solution 3**: Install missing dependencies
|
||||||
|
```bash
|
||||||
|
pip install -r requirements_windows.txt
|
||||||
|
pip install pyinstaller
|
||||||
|
```
|
||||||
|
|
||||||
|
### "DLL load failed" when running exe
|
||||||
|
|
||||||
|
This usually means a library isn't bundled correctly.
|
||||||
|
|
||||||
|
**Solution**: Rebuild with verbose output
|
||||||
|
```bash
|
||||||
|
pyinstaller --debug=imports label_printer_gui.py
|
||||||
|
```
|
||||||
|
|
||||||
|
### Executable is very large (200+ MB)
|
||||||
|
|
||||||
|
This is normal for Kivy applications. The size includes:
|
||||||
|
- Python runtime (~50 MB)
|
||||||
|
- Kivy framework (~30 MB)
|
||||||
|
- Dependencies (PIL, barcode, reportlab, etc.) (~20 MB)
|
||||||
|
- Your code (~1 KB)
|
||||||
|
|
||||||
|
You can reduce size slightly with:
|
||||||
|
```bash
|
||||||
|
--exclude-module=matplotlib
|
||||||
|
--exclude-module=numpy
|
||||||
|
--exclude-module=scipy
|
||||||
|
```
|
||||||
|
|
||||||
|
### Slow to start (5-10 seconds)
|
||||||
|
|
||||||
|
Normal for Kivy apps. The first startup initializes:
|
||||||
|
- Python runtime
|
||||||
|
- Kivy graphics system
|
||||||
|
- Font rendering
|
||||||
|
- Window initialization
|
||||||
|
|
||||||
|
Subsequent runs are faster (~3 seconds).
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Advanced Options
|
||||||
|
|
||||||
|
### Add an Icon
|
||||||
|
1. Create a 256x256 PNG icon: `app_icon.png`
|
||||||
|
2. Convert to ICO: Use an online tool or ImageMagick
|
||||||
|
3. Build with icon:
|
||||||
|
```bash
|
||||||
|
pyinstaller --icon=app_icon.ico label_printer_gui.py
|
||||||
|
```
|
||||||
|
|
||||||
|
### Two-File Distribution
|
||||||
|
Instead of `--onefile`, use separate files for faster startup:
|
||||||
|
```bash
|
||||||
|
pyinstaller label_printer_gui.py
|
||||||
|
```
|
||||||
|
Creates `dist/` folder with all files (faster to run, easier to debug).
|
||||||
|
|
||||||
|
### Console Output
|
||||||
|
To see error messages, remove `--windowed`:
|
||||||
|
```bash
|
||||||
|
pyinstaller --onefile --name=LabelPrinter label_printer_gui.py
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Build Options Reference
|
||||||
|
|
||||||
|
| Option | Purpose |
|
||||||
|
|--------|---------|
|
||||||
|
| `--onefile` | Single executable (recommended) |
|
||||||
|
| `--windowed` | No console window |
|
||||||
|
| `--icon=file.ico` | Custom icon |
|
||||||
|
| `--hidden-import=module` | Include module that's not imported directly |
|
||||||
|
| `--collect-all=module` | Include all module data |
|
||||||
|
| `--distpath=folder` | Output directory |
|
||||||
|
| `--name=AppName` | Executable name |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Final Steps
|
||||||
|
|
||||||
|
1. **Test the executable**: Run `LabelPrinter.exe` and test all features
|
||||||
|
2. **Verify PDF backup**: Check `pdf_backup/` folder is created
|
||||||
|
3. **Test printing**: Print a label to ensure PDF output works
|
||||||
|
4. **Share**: Distribute the `.exe` file to users
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Questions?
|
||||||
|
|
||||||
|
- Check the error message in the console
|
||||||
|
- Try rebuilding with `python build_exe.py`
|
||||||
|
- Ensure all dependencies are installed: `pip install -r requirements_windows.txt`
|
||||||
|
- Check that Python 3.11+ is installed: `python --version`
|
||||||
|
|
||||||
|
Good luck! 🚀
|
||||||
234
README.md
Normal file
234
README.md
Normal file
@@ -0,0 +1,234 @@
|
|||||||
|
# Label Printer GUI
|
||||||
|
|
||||||
|
A cross-platform barcode label printing application with a modern GUI. Create, generate, and print labels with automatic Code128 barcode encoding.
|
||||||
|
|
||||||
|
## Features
|
||||||
|
|
||||||
|
✨ **Core Features**
|
||||||
|
- 🎨 Beautiful Kivy GUI interface
|
||||||
|
- 📊 Automatic Code128 barcode generation
|
||||||
|
- 📄 High-quality PDF label generation
|
||||||
|
- 💾 Automatic PDF backup system
|
||||||
|
- ✅ Input validation with 25-character limit
|
||||||
|
- 🔢 Number-only filter for quantity field
|
||||||
|
|
||||||
|
🖨️ **Printer Support**
|
||||||
|
- Windows printer detection and printing
|
||||||
|
- Linux CUPS printer support
|
||||||
|
- macOS printing support
|
||||||
|
- PDF fallback (works everywhere)
|
||||||
|
|
||||||
|
🚀 **Distribution**
|
||||||
|
- PyInstaller support for standalone Windows .exe
|
||||||
|
- No Python installation needed
|
||||||
|
- Cross-platform source code (Windows, Linux, macOS)
|
||||||
|
|
||||||
|
## Quick Start
|
||||||
|
|
||||||
|
### Option 1: Python Source (Recommended for Development)
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# 1. Clone/Download the project
|
||||||
|
cd Label-design
|
||||||
|
|
||||||
|
# 2. Create virtual environment
|
||||||
|
python -m venv venv
|
||||||
|
source venv/bin/activate # On Windows: venv\Scripts\activate
|
||||||
|
|
||||||
|
# 3. Install dependencies
|
||||||
|
pip install -r requirements_gui.txt
|
||||||
|
|
||||||
|
# 4. Run the app
|
||||||
|
python label_printer_gui.py
|
||||||
|
```
|
||||||
|
|
||||||
|
### Option 2: Windows Standalone Executable
|
||||||
|
|
||||||
|
1. Download `LabelPrinter.exe` from releases
|
||||||
|
2. Double-click to run (no Python needed!)
|
||||||
|
3. First run takes ~5 seconds to initialize
|
||||||
|
|
||||||
|
## Building Your Own Executable
|
||||||
|
|
||||||
|
### Windows Build Steps
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# 1. Activate virtual environment
|
||||||
|
venv\Scripts\activate
|
||||||
|
|
||||||
|
# 2. Install PyInstaller
|
||||||
|
pip install pyinstaller
|
||||||
|
|
||||||
|
# 3. Build executable
|
||||||
|
python build_exe.py
|
||||||
|
```
|
||||||
|
|
||||||
|
Your executable will be in `dist/LabelPrinter.exe` (~200 MB)
|
||||||
|
|
||||||
|
### Manual Build Command
|
||||||
|
|
||||||
|
```bash
|
||||||
|
pyinstaller --onefile --windowed --name=LabelPrinter ^
|
||||||
|
--hidden-import=kivy ^
|
||||||
|
--hidden-import=kivy.core.window ^
|
||||||
|
--hidden-import=kivy.core.text ^
|
||||||
|
--hidden-import=kivy.core.image ^
|
||||||
|
--hidden-import=kivy.uix.boxlayout ^
|
||||||
|
--hidden-import=kivy.uix.gridlayout ^
|
||||||
|
--hidden-import=kivy.uix.label ^
|
||||||
|
--hidden-import=kivy.uix.textinput ^
|
||||||
|
--hidden-import=kivy.uix.button ^
|
||||||
|
--hidden-import=kivy.uix.spinner ^
|
||||||
|
--hidden-import=kivy.uix.scrollview ^
|
||||||
|
--hidden-import=kivy.uix.popup ^
|
||||||
|
--hidden-import=kivy.clock ^
|
||||||
|
--hidden-import=kivy.graphics ^
|
||||||
|
--hidden-import=PIL ^
|
||||||
|
--hidden-import=barcode ^
|
||||||
|
--hidden-import=reportlab ^
|
||||||
|
--hidden-import=print_label ^
|
||||||
|
--hidden-import=print_label_pdf ^
|
||||||
|
label_printer_gui.py
|
||||||
|
```
|
||||||
|
|
||||||
|
## File Structure
|
||||||
|
|
||||||
|
```
|
||||||
|
Label-design/
|
||||||
|
├── label_printer_gui.py # Main GUI application
|
||||||
|
├── print_label.py # Printing functionality
|
||||||
|
├── print_label_pdf.py # PDF generation
|
||||||
|
├── build_exe.py # PyInstaller build script
|
||||||
|
├── requirements_gui.txt # GUI dependencies
|
||||||
|
├── pdf_backup/ # Generated label PDFs
|
||||||
|
├── dist/ # Built executables
|
||||||
|
├── documentation/ # Docs and guides
|
||||||
|
│ ├── WINDOWS_SETUP.md
|
||||||
|
│ ├── PYINSTALLER_GUIDE.md
|
||||||
|
│ └── [other docs]
|
||||||
|
└── venv/ # Python virtual environment
|
||||||
|
```
|
||||||
|
|
||||||
|
## Dependencies
|
||||||
|
|
||||||
|
**Required (Core):**
|
||||||
|
- `python-barcode` - Barcode generation
|
||||||
|
- `pillow` - Image processing
|
||||||
|
- `reportlab` - PDF generation
|
||||||
|
|
||||||
|
**GUI:**
|
||||||
|
- `kivy` - Cross-platform GUI framework
|
||||||
|
|
||||||
|
**Optional (Printing):**
|
||||||
|
- `pycups` - Linux CUPS support
|
||||||
|
- `pywin32` - Windows printer support
|
||||||
|
|
||||||
|
## Usage
|
||||||
|
|
||||||
|
### Basic Workflow
|
||||||
|
|
||||||
|
1. **Enter Data:**
|
||||||
|
- **SAP-Nr**: Article code (up to 25 chars)
|
||||||
|
- **Cantitate**: Quantity (numbers only)
|
||||||
|
- **ID rola**: Reel/Cable ID (up to 25 chars)
|
||||||
|
|
||||||
|
2. **Select Printer:**
|
||||||
|
- Choose from detected printers
|
||||||
|
- Or select "PDF" for PDF output
|
||||||
|
|
||||||
|
3. **Print:**
|
||||||
|
- Click "PRINT LABEL"
|
||||||
|
- PDF is auto-saved to `pdf_backup/` folder
|
||||||
|
- Label sent to printer
|
||||||
|
|
||||||
|
### PDF Backup
|
||||||
|
|
||||||
|
All generated labels are automatically saved with timestamps:
|
||||||
|
```
|
||||||
|
pdf_backup/
|
||||||
|
├── final_label_20260205_120530.pdf
|
||||||
|
├── final_label_20260205_120542.pdf
|
||||||
|
└── final_label_20260205_120555.pdf
|
||||||
|
```
|
||||||
|
|
||||||
|
## Guides
|
||||||
|
|
||||||
|
- **[WINDOWS_SETUP.md](documentation/WINDOWS_SETUP.md)** - Windows installation guide
|
||||||
|
- **[PYINSTALLER_GUIDE.md](documentation/PYINSTALLER_GUIDE.md)** - Building executables
|
||||||
|
- **[documentation/](documentation/)** - All documentation
|
||||||
|
|
||||||
|
## Troubleshooting
|
||||||
|
|
||||||
|
### "No Printers Found"
|
||||||
|
This is normal. Select "PDF" option - labels will be saved to `pdf_backup/` folder.
|
||||||
|
|
||||||
|
### "GUI Won't Start"
|
||||||
|
Ensure all dependencies are installed:
|
||||||
|
```bash
|
||||||
|
pip install -r requirements_gui.txt
|
||||||
|
```
|
||||||
|
|
||||||
|
### Windows Executable Issues
|
||||||
|
- Update PyInstaller: `pip install --upgrade pyinstaller`
|
||||||
|
- Rebuild: `python build_exe.py`
|
||||||
|
- Check dependencies: `pip list`
|
||||||
|
|
||||||
|
### Kivy Graphics Issues
|
||||||
|
On Linux, you may need SDL2 dependencies:
|
||||||
|
```bash
|
||||||
|
sudo apt-get install libsdl2-dev libsdl2-image-dev libsdl2-mixer-dev libsdl2-ttf-dev
|
||||||
|
```
|
||||||
|
|
||||||
|
## Platform Support
|
||||||
|
|
||||||
|
| Platform | Source | Executable | Status |
|
||||||
|
|----------|--------|-----------|--------|
|
||||||
|
| Windows | ✅ Yes | ✅ Yes | ✅ Fully Supported |
|
||||||
|
| Linux | ✅ Yes | ❌ No | ✅ Fully Supported |
|
||||||
|
| macOS | ✅ Yes | ⚠️ Possible | ⚠️ Untested |
|
||||||
|
|
||||||
|
## Technical Details
|
||||||
|
|
||||||
|
### Barcode Format
|
||||||
|
- **Type**: Code128
|
||||||
|
- **Max Length**: 25 characters
|
||||||
|
- **DPI**: 300 (print quality)
|
||||||
|
|
||||||
|
### PDF Specifications
|
||||||
|
- **Page Size**: 11.5 x 8 cm (landscape)
|
||||||
|
- **Quality**: High-resolution barcodes
|
||||||
|
- **Font**: Helvetica with automatic sizing
|
||||||
|
|
||||||
|
### GUI Specifications
|
||||||
|
- **Framework**: Kivy 2.3+
|
||||||
|
- **Size**: 420 x 700 pixels (mobile-optimized)
|
||||||
|
- **Color**: White text on dark background
|
||||||
|
|
||||||
|
## Contributing
|
||||||
|
|
||||||
|
Feel free to fork, modify, and improve!
|
||||||
|
|
||||||
|
Suggested improvements:
|
||||||
|
- [ ] Custom barcode formats (QR, Code39, etc.)
|
||||||
|
- [ ] Batch label printing
|
||||||
|
- [ ] Label preview before printing
|
||||||
|
- [ ] Printer-specific settings
|
||||||
|
- [ ] Multi-language support
|
||||||
|
- [ ] Database integration
|
||||||
|
|
||||||
|
## License
|
||||||
|
|
||||||
|
Open source - modify and use freely
|
||||||
|
|
||||||
|
## Support
|
||||||
|
|
||||||
|
For issues, questions, or suggestions:
|
||||||
|
1. Check the documentation in `documentation/` folder
|
||||||
|
2. Review the code comments
|
||||||
|
3. Test with the source code first before building exe
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
**Status**: Production Ready ✅
|
||||||
|
|
||||||
|
Last Updated: February 2026
|
||||||
Binary file not shown.
Binary file not shown.
4732
build/LabelPrinter/Analysis-00.toc
Normal file
4732
build/LabelPrinter/Analysis-00.toc
Normal file
File diff suppressed because it is too large
Load Diff
1009
build/LabelPrinter/EXE-00.toc
Normal file
1009
build/LabelPrinter/EXE-00.toc
Normal file
File diff suppressed because it is too large
Load Diff
BIN
build/LabelPrinter/LabelPrinter.pkg
Normal file
BIN
build/LabelPrinter/LabelPrinter.pkg
Normal file
Binary file not shown.
1004
build/LabelPrinter/PKG-00.toc
Normal file
1004
build/LabelPrinter/PKG-00.toc
Normal file
File diff suppressed because it is too large
Load Diff
BIN
build/LabelPrinter/PYZ-00.pyz
Normal file
BIN
build/LabelPrinter/PYZ-00.pyz
Normal file
Binary file not shown.
3464
build/LabelPrinter/PYZ-00.toc
Normal file
3464
build/LabelPrinter/PYZ-00.toc
Normal file
File diff suppressed because it is too large
Load Diff
BIN
build/LabelPrinter/base_library.zip
Normal file
BIN
build/LabelPrinter/base_library.zip
Normal file
Binary file not shown.
8011
build/LabelPrinter/graph-LabelPrinter.dot
Normal file
8011
build/LabelPrinter/graph-LabelPrinter.dot
Normal file
File diff suppressed because it is too large
Load Diff
BIN
build/LabelPrinter/localpycs/pyimod01_archive.pyc
Normal file
BIN
build/LabelPrinter/localpycs/pyimod01_archive.pyc
Normal file
Binary file not shown.
BIN
build/LabelPrinter/localpycs/pyimod02_importers.pyc
Normal file
BIN
build/LabelPrinter/localpycs/pyimod02_importers.pyc
Normal file
Binary file not shown.
BIN
build/LabelPrinter/localpycs/pyimod03_ctypes.pyc
Normal file
BIN
build/LabelPrinter/localpycs/pyimod03_ctypes.pyc
Normal file
Binary file not shown.
BIN
build/LabelPrinter/localpycs/struct.pyc
Normal file
BIN
build/LabelPrinter/localpycs/struct.pyc
Normal file
Binary file not shown.
306
build/LabelPrinter/warn-LabelPrinter.txt
Normal file
306
build/LabelPrinter/warn-LabelPrinter.txt
Normal file
@@ -0,0 +1,306 @@
|
|||||||
|
|
||||||
|
This file lists modules PyInstaller was not able to find. This does not
|
||||||
|
necessarily mean these modules are required for running your program. Both
|
||||||
|
Python's standard library and 3rd-party Python packages often conditionally
|
||||||
|
import optional modules, some of which may be available only on certain
|
||||||
|
platforms.
|
||||||
|
|
||||||
|
Types of import:
|
||||||
|
* top-level: imported at the top-level - look at these first
|
||||||
|
* conditional: imported within an if-statement
|
||||||
|
* delayed: imported within a function
|
||||||
|
* optional: imported within a try-except-statement
|
||||||
|
|
||||||
|
IMPORTANT: Do NOT post this list to the issue-tracker. Use it as a basis for
|
||||||
|
tracking down the missing module yourself. Thanks!
|
||||||
|
|
||||||
|
missing module named 'collections.abc' - imported by traceback (top-level), typing (top-level), inspect (top-level), logging (top-level), importlib.resources.readers (top-level), selectors (top-level), tracemalloc (top-level), configparser (top-level), http.client (top-level), _pyrepl.types (top-level), _pyrepl.readline (top-level), asyncio.base_events (top-level), asyncio.coroutines (top-level), PIL.Image (top-level), PIL._typing (top-level), numpy._typing._array_like (top-level), numpy._typing._nested_sequence (conditional), numpy._typing._shape (top-level), numpy._typing._dtype_like (top-level), numpy.lib._function_base_impl (top-level), numpy.lib._npyio_impl (top-level), numpy.random._common (top-level), numpy.random._generator (top-level), numpy.random.bit_generator (top-level), numpy.random.mtrand (top-level), numpy.polynomial._polybase (top-level), xml.etree.ElementTree (top-level), PIL.TiffImagePlugin (top-level), PIL.ImageOps (top-level), PIL.ImagePalette (top-level), PIL.GimpGradientFile (conditional), PIL.ImageFilter (top-level), PIL.ImageQt (conditional), PIL.ImageMath (conditional), PIL.ImageSequence (conditional), PIL.PngImagePlugin (conditional), kivy.uix.filechooser (top-level), PIL.ImageDraw (top-level), PIL._imagingft (top-level), PIL.Jpeg2KImagePlugin (conditional), docutils (conditional), docutils.nodes (conditional), docutils.utils (conditional), docutils.utils._typing (conditional), docutils.frontend (conditional), docutils.parsers.rst.directives (conditional)
|
||||||
|
missing module named _winapi - imported by encodings (delayed, conditional, optional), shutil (conditional), ntpath (optional), subprocess (conditional), sysconfig (delayed), mimetypes (optional), multiprocessing.connection (optional), multiprocessing.spawn (delayed, conditional), multiprocessing.reduction (conditional), multiprocessing.shared_memory (conditional), multiprocessing.heap (conditional), multiprocessing.popen_spawn_win32 (top-level), asyncio.windows_events (top-level), asyncio.windows_utils (top-level)
|
||||||
|
missing module named msvcrt - imported by subprocess (optional), _pyrepl.windows_console (top-level), multiprocessing.spawn (delayed, conditional), multiprocessing.popen_spawn_win32 (top-level), asyncio.windows_events (top-level), asyncio.windows_utils (top-level), getpass (optional)
|
||||||
|
missing module named urllib.pathname2url - imported by urllib (conditional), kivy.core.audio.audio_gstplayer (conditional), kivy.core.video.video_gstplayer (conditional)
|
||||||
|
missing module named _frozen_importlib_external - imported by importlib._bootstrap (delayed), importlib (optional), importlib.abc (optional), zipimport (top-level)
|
||||||
|
excluded module named _frozen_importlib - imported by importlib (optional), importlib.abc (optional), zipimport (top-level)
|
||||||
|
missing module named winreg - imported by importlib._bootstrap_external (conditional), platform (delayed, optional), mimetypes (optional), urllib.request (delayed, conditional, optional), pygments.formatters.img (optional)
|
||||||
|
missing module named nt - imported by shutil (conditional), importlib._bootstrap_external (conditional), ntpath (optional), _colorize (delayed, conditional, optional), os (delayed, conditional, optional), ctypes (delayed, conditional), _pyrepl.windows_console (delayed, optional)
|
||||||
|
missing module named _scproxy - imported by urllib.request (conditional)
|
||||||
|
missing module named multiprocessing.BufferTooShort - imported by multiprocessing (top-level), multiprocessing.connection (top-level)
|
||||||
|
missing module named multiprocessing.AuthenticationError - imported by multiprocessing (top-level), multiprocessing.connection (top-level)
|
||||||
|
missing module named multiprocessing.get_context - imported by multiprocessing (top-level), multiprocessing.pool (top-level), multiprocessing.managers (top-level), multiprocessing.sharedctypes (top-level)
|
||||||
|
missing module named 'ctypes.macholib' - imported by ctypes.util (conditional)
|
||||||
|
missing module named multiprocessing.TimeoutError - imported by multiprocessing (top-level), multiprocessing.pool (top-level)
|
||||||
|
missing module named multiprocessing.set_start_method - imported by multiprocessing (top-level), multiprocessing.spawn (top-level)
|
||||||
|
missing module named multiprocessing.get_start_method - imported by multiprocessing (top-level), multiprocessing.spawn (top-level)
|
||||||
|
missing module named pyimod02_importers - imported by /srv/Label-design/venv/lib/python3.13/site-packages/PyInstaller/hooks/rthooks/pyi_rth_pkgutil.py (delayed)
|
||||||
|
missing module named olefile - imported by PIL.FpxImagePlugin (top-level), PIL.MicImagePlugin (top-level)
|
||||||
|
missing module named _dummy_thread - imported by numpy._core.arrayprint (optional)
|
||||||
|
missing module named 'numpy_distutils.cpuinfo' - imported by numpy.f2py.diagnose (delayed, conditional, optional)
|
||||||
|
missing module named 'numpy_distutils.fcompiler' - imported by numpy.f2py.diagnose (delayed, conditional, optional)
|
||||||
|
missing module named 'numpy_distutils.command' - imported by numpy.f2py.diagnose (delayed, conditional, optional)
|
||||||
|
missing module named numpy_distutils - imported by numpy.f2py.diagnose (delayed, optional)
|
||||||
|
missing module named typing_extensions - imported by numpy.random.bit_generator (top-level), charset_normalizer.legacy (conditional), docutils.utils._typing (conditional)
|
||||||
|
missing module named psutil - imported by numpy.testing._private.utils (delayed, optional)
|
||||||
|
missing module named usercustomize - imported by site (delayed, optional)
|
||||||
|
missing module named apport_python_hook - imported by sitecustomize (optional)
|
||||||
|
missing module named win32pdh - imported by numpy.testing._private.utils (delayed, conditional)
|
||||||
|
missing module named _overlapped - imported by asyncio.windows_events (top-level)
|
||||||
|
missing module named asyncio.DefaultEventLoopPolicy - imported by asyncio (delayed, conditional), asyncio.events (delayed, conditional)
|
||||||
|
missing module named _typeshed - imported by numpy.random.bit_generator (top-level)
|
||||||
|
missing module named numpy.random.RandomState - imported by numpy.random (top-level), numpy.random._generator (top-level)
|
||||||
|
missing module named threadpoolctl - imported by numpy.lib._utils_impl (delayed, optional)
|
||||||
|
missing module named numpy._core.zeros - imported by numpy._core (top-level), numpy.linalg._linalg (top-level), numpy (conditional)
|
||||||
|
missing module named numpy._core.vstack - imported by numpy._core (top-level), numpy.lib._shape_base_impl (top-level), numpy (conditional)
|
||||||
|
missing module named numpy._core.void - imported by numpy._core (conditional), numpy (conditional)
|
||||||
|
missing module named numpy._core.vecmat - imported by numpy._core (conditional), numpy (conditional)
|
||||||
|
missing module named numpy._core.vecdot - imported by numpy._core (top-level), numpy.linalg._linalg (top-level), numpy (conditional)
|
||||||
|
missing module named numpy._core.ushort - imported by numpy._core (conditional), numpy (conditional)
|
||||||
|
missing module named numpy._core.unsignedinteger - imported by numpy._core (conditional), numpy (conditional)
|
||||||
|
missing module named numpy._core.ulonglong - imported by numpy._core (conditional), numpy (conditional)
|
||||||
|
missing module named numpy._core.ulong - imported by numpy._core (conditional), numpy (conditional)
|
||||||
|
missing module named numpy._core.uintp - imported by numpy._core (conditional), numpy (conditional)
|
||||||
|
missing module named numpy._core.uintc - imported by numpy._core (conditional), numpy (conditional)
|
||||||
|
missing module named numpy._core.uint64 - imported by numpy._core (conditional), numpy (conditional), numpy._array_api_info (top-level)
|
||||||
|
missing module named numpy._core.uint32 - imported by numpy._core (conditional), numpy (conditional), numpy._array_api_info (top-level)
|
||||||
|
missing module named numpy._core.uint16 - imported by numpy._core (conditional), numpy (conditional), numpy._array_api_info (top-level)
|
||||||
|
missing module named numpy._core.uint - imported by numpy._core (conditional), numpy (conditional)
|
||||||
|
missing module named numpy._core.ubyte - imported by numpy._core (conditional), numpy (conditional)
|
||||||
|
missing module named numpy._core.trunc - imported by numpy._core (conditional), numpy (conditional)
|
||||||
|
missing module named numpy._core.true_divide - imported by numpy._core (conditional), numpy (conditional)
|
||||||
|
missing module named numpy._core.transpose - imported by numpy._core (top-level), numpy.linalg._linalg (top-level), numpy.lib._function_base_impl (top-level), numpy (conditional)
|
||||||
|
missing module named numpy._core.trace - imported by numpy._core (top-level), numpy.linalg._linalg (top-level), numpy (conditional)
|
||||||
|
missing module named numpy._core.timedelta64 - imported by numpy._core (conditional), numpy (conditional)
|
||||||
|
missing module named numpy._core.tensordot - imported by numpy._core (top-level), numpy.linalg._linalg (top-level), numpy (conditional)
|
||||||
|
missing module named numpy._core.tanh - imported by numpy._core (conditional), numpy (conditional)
|
||||||
|
missing module named numpy._core.tan - imported by numpy._core (conditional), numpy (conditional)
|
||||||
|
missing module named numpy._core.swapaxes - imported by numpy._core (top-level), numpy.linalg._linalg (top-level), numpy (conditional)
|
||||||
|
missing module named numpy._core.sum - imported by numpy._core (top-level), numpy.linalg._linalg (top-level), numpy (conditional)
|
||||||
|
missing module named numpy._core.subtract - imported by numpy._core (conditional), numpy (conditional)
|
||||||
|
missing module named numpy._core.str_ - imported by numpy._core (conditional), numpy (conditional)
|
||||||
|
missing module named numpy._core.square - imported by numpy._core (conditional), numpy (conditional)
|
||||||
|
missing module named numpy._core.sqrt - imported by numpy._core (top-level), numpy.linalg._linalg (top-level), numpy (conditional), numpy.fft._pocketfft (top-level)
|
||||||
|
missing module named numpy._core.spacing - imported by numpy._core (conditional), numpy (conditional)
|
||||||
|
missing module named numpy._core.sort - imported by numpy._core (top-level), numpy.linalg._linalg (top-level), numpy (conditional)
|
||||||
|
missing module named numpy._core.sinh - imported by numpy._core (conditional), numpy (conditional)
|
||||||
|
missing module named numpy._core.single - imported by numpy._core (top-level), numpy.linalg._linalg (top-level), numpy (conditional)
|
||||||
|
missing module named numpy._core.signedinteger - imported by numpy._core (conditional), numpy (conditional)
|
||||||
|
missing module named numpy._core.signbit - imported by numpy._core (delayed), numpy.testing._private.utils (delayed), numpy (conditional)
|
||||||
|
missing module named numpy._core.sign - imported by numpy._core (top-level), numpy.linalg._linalg (top-level), numpy (conditional)
|
||||||
|
missing module named numpy._core.short - imported by numpy._core (conditional), numpy (conditional)
|
||||||
|
missing module named numpy._core.rint - imported by numpy._core (conditional), numpy (conditional)
|
||||||
|
missing module named numpy._core.right_shift - imported by numpy._core (conditional), numpy (conditional)
|
||||||
|
missing module named numpy._core.result_type - imported by numpy._core (delayed), numpy.testing._private.utils (delayed), numpy (conditional), numpy.fft._pocketfft (top-level)
|
||||||
|
missing module named numpy._core.remainder - imported by numpy._core (conditional), numpy (conditional)
|
||||||
|
missing module named numpy._core.reciprocal - imported by numpy._core (top-level), numpy.linalg._linalg (top-level), numpy (conditional), numpy.fft._pocketfft (top-level)
|
||||||
|
missing module named numpy._core.radians - imported by numpy._core (conditional), numpy (conditional)
|
||||||
|
missing module named numpy._core.rad2deg - imported by numpy._core (conditional), numpy (conditional)
|
||||||
|
missing module named numpy._core.prod - imported by numpy._core (top-level), numpy.linalg._linalg (top-level), numpy (conditional)
|
||||||
|
missing module named numpy._core.power - imported by numpy._core (conditional), numpy (conditional)
|
||||||
|
missing module named numpy._core.positive - imported by numpy._core (conditional), numpy (conditional)
|
||||||
|
missing module named numpy._core.pi - imported by numpy._core (conditional), numpy (conditional)
|
||||||
|
missing module named numpy._core.outer - imported by numpy._core (top-level), numpy.linalg._linalg (top-level), numpy (conditional)
|
||||||
|
missing module named numpy._core.ones - imported by numpy._core (top-level), numpy.lib._polynomial_impl (top-level), numpy (conditional)
|
||||||
|
missing module named numpy._core.object_ - imported by numpy._core (top-level), numpy.linalg._linalg (top-level), numpy.testing._private.utils (delayed), numpy (conditional)
|
||||||
|
missing module named numpy._core.number - imported by numpy._core (delayed), numpy.testing._private.utils (delayed), numpy (conditional)
|
||||||
|
missing module named numpy._core.not_equal - imported by numpy._core (conditional), numpy (conditional)
|
||||||
|
missing module named numpy._core.nextafter - imported by numpy._core (conditional), numpy (conditional)
|
||||||
|
missing module named numpy._core.newaxis - imported by numpy._core (top-level), numpy.linalg._linalg (top-level), numpy (conditional)
|
||||||
|
missing module named numpy._core.negative - imported by numpy._core (conditional), numpy (conditional)
|
||||||
|
missing module named numpy._core.ndarray - imported by numpy._core (top-level), numpy.testing._private.utils (top-level), numpy.lib._utils_impl (top-level), numpy (conditional)
|
||||||
|
missing module named numpy._core.multiply - imported by numpy._core (top-level), numpy.linalg._linalg (top-level), numpy (conditional)
|
||||||
|
missing module named numpy._core.moveaxis - imported by numpy._core (top-level), numpy.linalg._linalg (top-level), numpy (conditional)
|
||||||
|
missing module named numpy._core.modf - imported by numpy._core (conditional), numpy (conditional)
|
||||||
|
missing module named numpy._core.mod - imported by numpy._core (conditional), numpy (conditional)
|
||||||
|
missing module named numpy._core.minimum - imported by numpy._core (conditional), numpy (conditional)
|
||||||
|
missing module named numpy._core.maximum - imported by numpy._core (conditional), numpy (conditional)
|
||||||
|
missing module named numpy._core.max - imported by numpy._core (delayed), numpy.testing._private.utils (delayed), numpy (conditional)
|
||||||
|
missing module named numpy._core.matvec - imported by numpy._core (conditional), numpy (conditional)
|
||||||
|
missing module named numpy._core.matrix_transpose - imported by numpy._core (top-level), numpy.linalg._linalg (top-level), numpy (conditional)
|
||||||
|
missing module named numpy._core.matmul - imported by numpy._core (top-level), numpy.linalg._linalg (top-level), numpy (conditional)
|
||||||
|
missing module named numpy._core.longlong - imported by numpy._core (conditional), numpy (conditional)
|
||||||
|
missing module named numpy._core.longdouble - imported by numpy._core (conditional), numpy (conditional)
|
||||||
|
missing module named numpy._core.long - imported by numpy._core (conditional), numpy (conditional)
|
||||||
|
missing module named numpy._core.logical_xor - imported by numpy._core (conditional), numpy (conditional)
|
||||||
|
missing module named numpy._core.logical_or - imported by numpy._core (conditional), numpy (conditional)
|
||||||
|
missing module named numpy._core.logical_not - imported by numpy._core (conditional), numpy (conditional)
|
||||||
|
missing module named numpy._core.logical_and - imported by numpy._core (conditional), numpy (conditional)
|
||||||
|
missing module named numpy._core.logaddexp2 - imported by numpy._core (conditional), numpy (conditional)
|
||||||
|
missing module named numpy._core.logaddexp - imported by numpy._core (conditional), numpy (conditional)
|
||||||
|
missing module named numpy._core.log10 - imported by numpy._core (conditional), numpy (conditional)
|
||||||
|
missing module named numpy._core.log2 - imported by numpy._core (conditional), numpy (conditional)
|
||||||
|
missing module named numpy._core.log1p - imported by numpy._core (conditional), numpy (conditional)
|
||||||
|
missing module named numpy._core.log - imported by numpy._core (conditional), numpy (conditional)
|
||||||
|
missing module named numpy._core.linspace - imported by numpy._core (top-level), numpy.lib._index_tricks_impl (top-level), numpy (conditional)
|
||||||
|
missing module named numpy._core.less_equal - imported by numpy._core (conditional), numpy (conditional)
|
||||||
|
missing module named numpy._core.less - imported by numpy._core (conditional), numpy (conditional)
|
||||||
|
missing module named numpy._core.left_shift - imported by numpy._core (conditional), numpy (conditional)
|
||||||
|
missing module named numpy._core.ldexp - imported by numpy._core (conditional), numpy (conditional)
|
||||||
|
missing module named numpy._core.lcm - imported by numpy._core (conditional), numpy (conditional)
|
||||||
|
missing module named numpy._core.isscalar - imported by numpy._core (delayed), numpy.testing._private.utils (delayed), numpy.lib._polynomial_impl (top-level), numpy (conditional)
|
||||||
|
missing module named numpy._core.isnat - imported by numpy._core (top-level), numpy.testing._private.utils (top-level), numpy (conditional)
|
||||||
|
missing module named numpy._core.isnan - imported by numpy._core (top-level), numpy.linalg._linalg (top-level), numpy.testing._private.utils (delayed), numpy (conditional)
|
||||||
|
missing module named numpy._core.isfinite - imported by numpy._core (top-level), numpy.linalg._linalg (top-level), numpy (conditional)
|
||||||
|
missing module named numpy._core.intp - imported by numpy._core (top-level), numpy.linalg._linalg (top-level), numpy.testing._private.utils (top-level), numpy (conditional), numpy._array_api_info (top-level)
|
||||||
|
missing module named numpy._core.integer - imported by numpy._core (conditional), numpy (conditional), numpy.fft._helper (top-level)
|
||||||
|
missing module named numpy._core.intc - imported by numpy._core (top-level), numpy.linalg._linalg (top-level), numpy (conditional)
|
||||||
|
missing module named numpy._core.int64 - imported by numpy._core (conditional), numpy (conditional), numpy._array_api_info (top-level)
|
||||||
|
missing module named numpy._core.int32 - imported by numpy._core (conditional), numpy (conditional), numpy._array_api_info (top-level)
|
||||||
|
missing module named numpy._core.int16 - imported by numpy._core (conditional), numpy (conditional), numpy._array_api_info (top-level)
|
||||||
|
missing module named numpy._core.int8 - imported by numpy._core (conditional), numpy (conditional), numpy._array_api_info (top-level)
|
||||||
|
missing module named numpy._core.inf - imported by numpy._core (top-level), numpy.linalg._linalg (top-level), numpy.testing._private.utils (delayed), numpy (conditional)
|
||||||
|
missing module named numpy._core.inexact - imported by numpy._core (top-level), numpy.linalg._linalg (top-level), numpy (conditional)
|
||||||
|
missing module named numpy._core.iinfo - imported by numpy._core (top-level), numpy.lib._twodim_base_impl (top-level), numpy (conditional)
|
||||||
|
missing module named numpy._core.hypot - imported by numpy._core (conditional), numpy (conditional)
|
||||||
|
missing module named numpy._core.hstack - imported by numpy._core (top-level), numpy.lib._polynomial_impl (top-level), numpy (conditional)
|
||||||
|
missing module named numpy._core.heaviside - imported by numpy._core (conditional), numpy (conditional)
|
||||||
|
missing module named numpy._core.half - imported by numpy._core (conditional), numpy (conditional)
|
||||||
|
missing module named numpy._core.greater_equal - imported by numpy._core (conditional), numpy (conditional)
|
||||||
|
missing module named numpy._core.greater - imported by numpy._core (conditional), numpy (conditional)
|
||||||
|
missing module named numpy._core.gcd - imported by numpy._core (conditional), numpy (conditional)
|
||||||
|
missing module named numpy._core.frompyfunc - imported by numpy._core (conditional), numpy (conditional)
|
||||||
|
missing module named numpy._core.frexp - imported by numpy._core (conditional), numpy (conditional)
|
||||||
|
missing module named numpy._core.fmod - imported by numpy._core (conditional), numpy (conditional)
|
||||||
|
missing module named numpy._core.fmin - imported by numpy._core (conditional), numpy (conditional)
|
||||||
|
missing module named numpy._core.fmax - imported by numpy._core (conditional), numpy (conditional)
|
||||||
|
missing module named numpy._core.floor_divide - imported by numpy._core (conditional), numpy (conditional)
|
||||||
|
missing module named numpy._core.floor - imported by numpy._core (conditional), numpy (conditional)
|
||||||
|
missing module named numpy._core.floating - imported by numpy._core (conditional), numpy (conditional)
|
||||||
|
missing module named numpy._core.float_power - imported by numpy._core (conditional), numpy (conditional)
|
||||||
|
missing module named numpy._core.float32 - imported by numpy._core (top-level), numpy.testing._private.utils (top-level), numpy (conditional), numpy._array_api_info (top-level)
|
||||||
|
missing module named numpy._core.float16 - imported by numpy._core (conditional), numpy (conditional)
|
||||||
|
missing module named numpy._core.finfo - imported by numpy._core (top-level), numpy.linalg._linalg (top-level), numpy.lib._polynomial_impl (top-level), numpy (conditional)
|
||||||
|
missing module named numpy._core.fabs - imported by numpy._core (conditional), numpy (conditional)
|
||||||
|
missing module named numpy._core.expm1 - imported by numpy._core (conditional), numpy (conditional)
|
||||||
|
missing module named numpy._core.exp2 - imported by numpy._core (conditional), numpy (conditional)
|
||||||
|
missing module named numpy._core.exp - imported by numpy._core (conditional), numpy (conditional)
|
||||||
|
missing module named numpy._core.euler_gamma - imported by numpy._core (conditional), numpy (conditional)
|
||||||
|
missing module named numpy._core.errstate - imported by numpy._core (top-level), numpy.linalg._linalg (top-level), numpy.testing._private.utils (delayed), numpy (conditional)
|
||||||
|
missing module named numpy._core.equal - imported by numpy._core (conditional), numpy (conditional)
|
||||||
|
missing module named numpy._core.empty_like - imported by numpy._core (top-level), numpy.linalg._linalg (top-level), numpy (conditional), numpy.fft._pocketfft (top-level)
|
||||||
|
missing module named numpy._core.empty - imported by numpy._core (top-level), numpy.linalg._linalg (top-level), numpy.testing._private.utils (top-level), numpy (conditional), numpy.fft._helper (top-level)
|
||||||
|
missing module named numpy._core.e - imported by numpy._core (conditional), numpy (conditional)
|
||||||
|
missing module named numpy._core.double - imported by numpy._core (top-level), numpy.linalg._linalg (top-level), numpy (conditional)
|
||||||
|
missing module named numpy._core.dot - imported by numpy._core (top-level), numpy.linalg._linalg (top-level), numpy.lib._polynomial_impl (top-level), numpy (conditional)
|
||||||
|
missing module named numpy._core.divmod - imported by numpy._core (conditional), numpy (conditional)
|
||||||
|
missing module named numpy._core.divide - imported by numpy._core (top-level), numpy.linalg._linalg (top-level), numpy (conditional)
|
||||||
|
missing module named numpy._core.diagonal - imported by numpy._core (top-level), numpy.linalg._linalg (top-level), numpy (conditional)
|
||||||
|
missing module named numpy._core.degrees - imported by numpy._core (conditional), numpy (conditional)
|
||||||
|
missing module named numpy._core.deg2rad - imported by numpy._core (conditional), numpy (conditional)
|
||||||
|
missing module named numpy._core.datetime64 - imported by numpy._core (conditional), numpy (conditional)
|
||||||
|
missing module named numpy._core.csingle - imported by numpy._core (top-level), numpy.linalg._linalg (top-level), numpy (conditional)
|
||||||
|
missing module named numpy._core.cross - imported by numpy._core (top-level), numpy.linalg._linalg (top-level), numpy (conditional)
|
||||||
|
missing module named numpy._core.count_nonzero - imported by numpy._core (top-level), numpy.linalg._linalg (top-level), numpy (conditional)
|
||||||
|
missing module named numpy._core.cosh - imported by numpy._core (conditional), numpy (conditional)
|
||||||
|
missing module named numpy._core.cos - imported by numpy._core (conditional), numpy (conditional)
|
||||||
|
missing module named numpy._core.copysign - imported by numpy._core (conditional), numpy (conditional)
|
||||||
|
missing module named numpy._core.conjugate - imported by numpy._core (conditional), numpy (conditional), numpy.fft._pocketfft (top-level)
|
||||||
|
missing module named numpy._core.conj - imported by numpy._core (conditional), numpy (conditional)
|
||||||
|
missing module named numpy._core.complexfloating - imported by numpy._core (top-level), numpy.linalg._linalg (top-level), numpy (conditional)
|
||||||
|
missing module named numpy._core.complex64 - imported by numpy._core (conditional), numpy (conditional), numpy._array_api_info (top-level)
|
||||||
|
missing module named numpy._core.clongdouble - imported by numpy._core (conditional), numpy (conditional)
|
||||||
|
missing module named numpy._core.character - imported by numpy._core (conditional), numpy (conditional)
|
||||||
|
missing module named numpy._core.ceil - imported by numpy._core (conditional), numpy (conditional)
|
||||||
|
missing module named numpy._core.cdouble - imported by numpy._core (top-level), numpy.linalg._linalg (top-level), numpy (conditional)
|
||||||
|
missing module named numpy._core.cbrt - imported by numpy._core (conditional), numpy (conditional)
|
||||||
|
missing module named numpy._core.bytes_ - imported by numpy._core (conditional), numpy (conditional)
|
||||||
|
missing module named numpy._core.byte - imported by numpy._core (conditional), numpy (conditional)
|
||||||
|
missing module named numpy._core.bool_ - imported by numpy._core (conditional), numpy (conditional)
|
||||||
|
missing module named numpy._core.bitwise_xor - imported by numpy._core (conditional), numpy (conditional)
|
||||||
|
missing module named numpy._core.bitwise_or - imported by numpy._core (conditional), numpy (conditional)
|
||||||
|
missing module named numpy._core.bitwise_count - imported by numpy._core (conditional), numpy (conditional)
|
||||||
|
missing module named numpy._core.bitwise_and - imported by numpy._core (conditional), numpy (conditional)
|
||||||
|
missing module named numpy._core.atleast_3d - imported by numpy._core (top-level), numpy.lib._shape_base_impl (top-level), numpy (conditional)
|
||||||
|
missing module named numpy._core.atleast_2d - imported by numpy._core (top-level), numpy.linalg._linalg (top-level), numpy (conditional)
|
||||||
|
missing module named numpy._core.atleast_1d - imported by numpy._core (top-level), numpy.lib._polynomial_impl (top-level), numpy (conditional)
|
||||||
|
missing module named numpy._core.asarray - imported by numpy._core (top-level), numpy.linalg._linalg (top-level), numpy.lib._array_utils_impl (top-level), numpy (conditional), numpy.fft._helper (top-level), numpy.fft._pocketfft (top-level)
|
||||||
|
missing module named numpy._core.asanyarray - imported by numpy._core (top-level), numpy.linalg._linalg (top-level), numpy (conditional)
|
||||||
|
missing module named numpy._core.array_repr - imported by numpy._core (top-level), numpy.testing._private.utils (top-level), numpy (conditional)
|
||||||
|
missing module named numpy._core.array2string - imported by numpy._core (delayed), numpy.testing._private.utils (delayed), numpy (conditional)
|
||||||
|
missing module named numpy._core.array - imported by numpy._core (top-level), numpy.linalg._linalg (top-level), numpy.testing._private.utils (top-level), numpy.lib._polynomial_impl (top-level), numpy (conditional)
|
||||||
|
missing module named numpy._core.argsort - imported by numpy._core (top-level), numpy.linalg._linalg (top-level), numpy (conditional)
|
||||||
|
missing module named numpy._core.arctanh - imported by numpy._core (conditional), numpy (conditional)
|
||||||
|
missing module named numpy._core.arctan2 - imported by numpy._core (conditional), numpy (conditional)
|
||||||
|
missing module named numpy._core.arctan - imported by numpy._core (conditional), numpy (conditional)
|
||||||
|
missing module named numpy._core.arcsinh - imported by numpy._core (conditional), numpy (conditional)
|
||||||
|
missing module named numpy._core.arcsin - imported by numpy._core (conditional), numpy (conditional)
|
||||||
|
missing module named numpy._core.arccosh - imported by numpy._core (conditional), numpy (conditional)
|
||||||
|
missing module named numpy._core.arccos - imported by numpy._core (conditional), numpy (conditional)
|
||||||
|
missing module named numpy._core.arange - imported by numpy._core (top-level), numpy.testing._private.utils (top-level), numpy (conditional), numpy.fft._helper (top-level)
|
||||||
|
missing module named numpy._core.amin - imported by numpy._core (top-level), numpy.linalg._linalg (top-level), numpy (conditional)
|
||||||
|
missing module named numpy._core.amax - imported by numpy._core (top-level), numpy.linalg._linalg (top-level), numpy (conditional)
|
||||||
|
missing module named numpy._core.all - imported by numpy._core (top-level), numpy.linalg._linalg (top-level), numpy.testing._private.utils (delayed), numpy (conditional)
|
||||||
|
missing module named numpy._core.add - imported by numpy._core (top-level), numpy.linalg._linalg (top-level), numpy (conditional)
|
||||||
|
missing module named yaml - imported by numpy.__config__ (delayed)
|
||||||
|
missing module named numpy._distributor_init_local - imported by numpy (optional), numpy._distributor_init (optional)
|
||||||
|
missing module named defusedxml - imported by PIL.Image (optional)
|
||||||
|
missing module named 'rlextra.pageCatcher' - imported by reportlab.lib.pdfencrypt (delayed, optional)
|
||||||
|
missing module named pyaes - imported by reportlab.lib.pdfencrypt (optional)
|
||||||
|
missing module named pyphen - imported by reportlab.platypus.paragraph (optional)
|
||||||
|
missing module named reportlab.platypus.cleanBlockQuotedText - imported by reportlab.platypus (conditional), reportlab.platypus.paraparser (conditional)
|
||||||
|
missing module named sets - imported by reportlab.platypus.doctemplate (optional)
|
||||||
|
missing module named 'tests.test_platypus_tables' - imported by reportlab.platypus.tables (conditional)
|
||||||
|
missing module named renderPM - imported by reportlab.graphics.charts.utils (delayed, conditional)
|
||||||
|
missing module named rlextra - imported by reportlab.graphics.charts.textlabels (optional)
|
||||||
|
missing module named freetype - imported by reportlab.graphics.utils (delayed, conditional, optional)
|
||||||
|
missing module named _rl_renderPM - imported by reportlab.graphics.utils (delayed, conditional, optional), reportlab.graphics.renderPM (delayed, conditional, optional)
|
||||||
|
missing module named 'rlextra.graphics' - imported by reportlab.graphics.shapes (delayed, conditional, optional)
|
||||||
|
missing module named Image - imported by reportlab.graphics.renderPM (delayed, optional), kivy.core.image.img_pil (optional), docutils.parsers.rst.directives.images (optional)
|
||||||
|
missing module named rlPyCairo - imported by reportlab.graphics.renderPM (delayed, conditional, optional)
|
||||||
|
missing module named macostools - imported by reportlab.lib.utils (conditional), reportlab.graphics.renderPDF (delayed, conditional, optional), reportlab.graphics.shapes (delayed, conditional)
|
||||||
|
missing module named macfs - imported by reportlab.lib.utils (conditional), reportlab.graphics.renderPDF (delayed, conditional, optional), reportlab.graphics.shapes (delayed, conditional)
|
||||||
|
missing module named new - imported by reportlab.lib.attrmap (delayed, conditional)
|
||||||
|
missing module named reportlab.platypus.XPreformatted - imported by reportlab.platypus (top-level), reportlab.graphics.charts.textlabels (top-level)
|
||||||
|
missing module named 'reportlab.lib.pyHnj' - imported by reportlab.lib.utils (delayed, optional)
|
||||||
|
missing module named rlbidi - imported by reportlab.pdfgen.textobject (optional)
|
||||||
|
missing module named uharfbuzz - imported by reportlab.pdfbase.ttfonts (optional)
|
||||||
|
missing module named pyRXPU - imported by reportlab.lib.rparsexml (optional)
|
||||||
|
missing module named reportlab_mods - imported by reportlab (optional)
|
||||||
|
missing module named 'reportlab.local_rl_mods' - imported by reportlab (optional)
|
||||||
|
missing module named Queue - imported by kivy.compat (optional)
|
||||||
|
missing module named ConfigParser - imported by kivy.config (optional)
|
||||||
|
missing module named 'kivy.core.text._text_pango' - imported by kivy.core.text.text_pango (top-level)
|
||||||
|
missing module named pygame - imported by kivy.input.providers.androidjoystick (conditional), kivy.app (delayed, conditional), kivy.core.window.window_pygame (top-level), kivy.support (delayed), kivy.core.text.text_pygame (optional), kivy.core.clipboard.clipboard_pygame (optional), kivy.core.audio.audio_pygame (conditional, optional), kivy.core.image.img_pygame (optional)
|
||||||
|
missing module named android - imported by kivy.metrics (delayed, conditional), kivy.core.window (delayed, conditional), kivy.base (delayed, optional), kivy.input.providers.androidjoystick (optional), kivy.app (delayed, conditional), kivy.core.window.window_pygame (conditional, optional), kivy.support (delayed, optional), kivy.core.clipboard.clipboard_android (top-level), kivy.core.window.window_sdl2 (delayed, conditional), kivy.core.audio.audio_android (top-level)
|
||||||
|
missing module named jnius - imported by kivy.metrics (delayed, conditional), kivy.app (delayed, conditional), kivy.core.clipboard.clipboard_android (top-level), kivy.core.camera.camera_android (top-level), kivy.core.audio.audio_android (top-level)
|
||||||
|
missing module named cv2 - imported by kivy.core.camera.camera_android (delayed), kivy.core.camera.camera_opencv (optional)
|
||||||
|
missing module named 'opencv.highgui' - imported by kivy.core.camera.camera_opencv (optional)
|
||||||
|
missing module named opencv - imported by kivy.core.camera.camera_opencv (optional)
|
||||||
|
missing module named android_mixer - imported by kivy.core.audio.audio_pygame (conditional, optional)
|
||||||
|
missing module named 'android.mixer' - imported by kivy.core.audio.audio_pygame (conditional, optional)
|
||||||
|
missing module named 'kivy.lib.gstplayer._gstplayer' - imported by kivy.lib.gstplayer (conditional)
|
||||||
|
missing module named ios - imported by kivy.metrics (delayed, conditional), kivy.core.window (delayed)
|
||||||
|
missing module named chardet - imported by pygments.lexer (delayed, conditional, optional)
|
||||||
|
missing module named pygments.formatters.BBCodeFormatter - imported by pygments.formatters (top-level), kivy.uix.codeinput (top-level)
|
||||||
|
missing module named pygments.lexers.PrologLexer - imported by pygments.lexers (top-level), pygments.lexers.cplint (top-level)
|
||||||
|
missing module named _winreg - imported by pygments.formatters.img (optional)
|
||||||
|
missing module named ctags - imported by pygments.formatters.html (optional)
|
||||||
|
missing module named smb - imported by kivy.loader (delayed, conditional, optional)
|
||||||
|
missing module named Leap - imported by kivy.input.providers.leapfinger (delayed)
|
||||||
|
missing module named oscpy - imported by kivy.input.providers.tuio (delayed, optional)
|
||||||
|
missing module named win32file - imported by kivy.uix.filechooser (conditional, optional)
|
||||||
|
missing module named 'ffpyplayer.tools' - imported by kivy.core.video.video_ffpyplayer (optional), kivy.core.audio.audio_ffpyplayer (optional), kivy.core.image.img_ffpyplayer (top-level)
|
||||||
|
missing module named 'ffpyplayer.pic' - imported by kivy.core.image.img_ffpyplayer (top-level)
|
||||||
|
missing module named ffpyplayer - imported by kivy.core.video.video_ffpyplayer (optional), kivy.core.audio.audio_ffpyplayer (optional), kivy.core.image.img_ffpyplayer (top-level)
|
||||||
|
missing module named 'gi.repository' - imported by kivy.core.camera.camera_gi (top-level), kivy.core.clipboard.clipboard_gtk3 (top-level)
|
||||||
|
missing module named gi - imported by kivy.support (delayed, optional), kivy.core.clipboard.clipboard_gtk3 (top-level)
|
||||||
|
missing module named gobject - imported by kivy.support (delayed, optional)
|
||||||
|
missing module named kivy.lib.vidcore_lite.egl - imported by kivy.lib.vidcore_lite (top-level), kivy.core.window.window_egl_rpi (top-level)
|
||||||
|
missing module named kivy.lib.vidcore_lite.bcm - imported by kivy.lib.vidcore_lite (top-level), kivy.core.window.window_egl_rpi (top-level)
|
||||||
|
missing module named win32con - imported by kivy.core.window.window_pygame (delayed), kivy.core.window.window_sdl2 (delayed, conditional)
|
||||||
|
missing module named enchant - imported by kivy.core.spelling.spelling_enchant (top-level)
|
||||||
|
missing module named 'ffpyplayer.player' - imported by kivy.core.video.video_ffpyplayer (optional), kivy.core.audio.audio_ffpyplayer (optional)
|
||||||
|
missing module named 'pygame.scrap' - imported by kivy.core.clipboard.clipboard_pygame (optional)
|
||||||
|
missing module named dbus - imported by kivy.core.clipboard.clipboard_dbusklipper (optional)
|
||||||
|
missing module named 'pyobjus.dylib_manager' - imported by kivy.core.clipboard.clipboard_nspaste (optional), kivy.core.audio.audio_avplayer (top-level)
|
||||||
|
missing module named pyobjus - imported by kivy.core.clipboard.clipboard_nspaste (optional), kivy.core.audio.audio_avplayer (top-level)
|
||||||
|
missing module named picamera - imported by kivy.core.camera.camera_picamera (top-level)
|
||||||
|
missing module named ffmpeg - imported by kivy.core.video.video_ffmpeg (optional)
|
||||||
|
missing module named 'android.runnable' - imported by kivy.core.clipboard.clipboard_android (top-level)
|
||||||
|
missing module named AppKit - imported by kivy.core.spelling.spelling_osxappkit (top-level)
|
||||||
|
missing module named win32gui - imported by kivy.core.window.window_pygame (delayed)
|
||||||
|
missing module named win32api - imported by print_label (delayed, conditional, optional), kivy.core.window.window_pygame (delayed)
|
||||||
|
missing module named kivy_deps - imported by kivy (optional)
|
||||||
|
missing module named trio - imported by kivy.clock (delayed, conditional)
|
||||||
|
missing module named win32print - imported by print_label (delayed, conditional, optional)
|
||||||
|
missing module named vms_lib - imported by platform (delayed, optional)
|
||||||
|
missing module named 'java.lang' - imported by platform (delayed, optional)
|
||||||
|
missing module named java - imported by platform (delayed)
|
||||||
|
missing module named _wmi - imported by platform (optional)
|
||||||
45044
build/LabelPrinter/xref-LabelPrinter.html
Normal file
45044
build/LabelPrinter/xref-LabelPrinter.html
Normal file
File diff suppressed because it is too large
Load Diff
63
build_exe.py
Normal file
63
build_exe.py
Normal file
@@ -0,0 +1,63 @@
|
|||||||
|
"""
|
||||||
|
PyInstaller build script for Label Printer GUI
|
||||||
|
Run this to create a standalone Windows executable
|
||||||
|
"""
|
||||||
|
|
||||||
|
import os
|
||||||
|
import sys
|
||||||
|
from PyInstaller import __main__ as pyi_main
|
||||||
|
|
||||||
|
# Get the current directory
|
||||||
|
script_dir = os.path.dirname(os.path.abspath(__file__))
|
||||||
|
|
||||||
|
# PyInstaller arguments
|
||||||
|
args = [
|
||||||
|
'label_printer_gui.py',
|
||||||
|
'--onefile', # Create a single executable
|
||||||
|
'--windowed', # Don't show console window
|
||||||
|
'--name=LabelPrinter', # Executable name
|
||||||
|
'--distpath=./dist', # Output directory
|
||||||
|
'--buildpath=./build', # Build directory
|
||||||
|
'--hidden-import=kivy',
|
||||||
|
'--hidden-import=kivy.core.window',
|
||||||
|
'--hidden-import=kivy.core.text',
|
||||||
|
'--hidden-import=kivy.core.image',
|
||||||
|
'--hidden-import=kivy.uix.boxlayout',
|
||||||
|
'--hidden-import=kivy.uix.gridlayout',
|
||||||
|
'--hidden-import=kivy.uix.label',
|
||||||
|
'--hidden-import=kivy.uix.textinput',
|
||||||
|
'--hidden-import=kivy.uix.button',
|
||||||
|
'--hidden-import=kivy.uix.spinner',
|
||||||
|
'--hidden-import=kivy.uix.scrollview',
|
||||||
|
'--hidden-import=kivy.uix.popup',
|
||||||
|
'--hidden-import=kivy.clock',
|
||||||
|
'--hidden-import=kivy.graphics',
|
||||||
|
'--hidden-import=PIL',
|
||||||
|
'--hidden-import=barcode',
|
||||||
|
'--hidden-import=reportlab',
|
||||||
|
'--hidden-import=print_label',
|
||||||
|
'--hidden-import=print_label_pdf',
|
||||||
|
]
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
print("=" * 60)
|
||||||
|
print("Label Printer GUI - PyInstaller Build")
|
||||||
|
print("=" * 60)
|
||||||
|
print("\nBuilding standalone executable...")
|
||||||
|
print("This may take a few minutes...\n")
|
||||||
|
|
||||||
|
# Change to script directory
|
||||||
|
os.chdir(script_dir)
|
||||||
|
|
||||||
|
# Run PyInstaller
|
||||||
|
pyi_main.run(args)
|
||||||
|
|
||||||
|
print("\n" + "=" * 60)
|
||||||
|
print("Build Complete!")
|
||||||
|
print("=" * 60)
|
||||||
|
print("\nExecutable location: ./dist/LabelPrinter.exe")
|
||||||
|
print("\nYou can now:")
|
||||||
|
print("1. Double-click LabelPrinter.exe to run")
|
||||||
|
print("2. Share the exe with others")
|
||||||
|
print("3. Create a shortcut on desktop")
|
||||||
|
print("\nNote: First run may take a moment as Kivy initializes")
|
||||||
BIN
dist/LabelPrinter
vendored
Executable file
BIN
dist/LabelPrinter
vendored
Executable file
Binary file not shown.
114
documentation/WINDOWS_SETUP.md
Normal file
114
documentation/WINDOWS_SETUP.md
Normal file
@@ -0,0 +1,114 @@
|
|||||||
|
# Label Printer GUI - Windows Setup Guide
|
||||||
|
|
||||||
|
## Installation Steps
|
||||||
|
|
||||||
|
### 1. Install Python
|
||||||
|
- Download Python 3.11+ from [python.org](https://www.python.org/downloads/)
|
||||||
|
- **Important**: Check "Add Python to PATH" during installation
|
||||||
|
|
||||||
|
### 2. Create Virtual Environment
|
||||||
|
```bash
|
||||||
|
python -m venv venv
|
||||||
|
venv\Scripts\activate
|
||||||
|
```
|
||||||
|
|
||||||
|
### 3. Install Dependencies
|
||||||
|
```bash
|
||||||
|
pip install -r requirements_windows.txt
|
||||||
|
```
|
||||||
|
|
||||||
|
### 4. Optional: Windows Printer Support (pywin32)
|
||||||
|
After installing requirements, run:
|
||||||
|
```bash
|
||||||
|
python -m pip install --upgrade pywin32
|
||||||
|
python Scripts/pywin32_postinstall.py -install
|
||||||
|
```
|
||||||
|
|
||||||
|
This enables native Windows printer detection.
|
||||||
|
|
||||||
|
## Running the App
|
||||||
|
|
||||||
|
### From Command Prompt
|
||||||
|
```bash
|
||||||
|
venv\Scripts\activate
|
||||||
|
python label_printer_gui.py
|
||||||
|
```
|
||||||
|
|
||||||
|
### Create Shortcut (Optional)
|
||||||
|
Create a batch file `run_app.bat`:
|
||||||
|
```batch
|
||||||
|
@echo off
|
||||||
|
call venv\Scripts\activate.bat
|
||||||
|
python label_printer_gui.py
|
||||||
|
pause
|
||||||
|
```
|
||||||
|
|
||||||
|
Then double-click the batch file to run the app.
|
||||||
|
|
||||||
|
## Features
|
||||||
|
|
||||||
|
✅ **Cross-Platform GUI** - Works on Windows, Linux, and macOS
|
||||||
|
✅ **Barcode Generation** - Automatic Code128 barcode creation
|
||||||
|
✅ **PDF Output** - High-quality PDF labels stored in `pdf_backup/` folder
|
||||||
|
✅ **Printer Support** - Automatic printer detection (Windows, Linux, macOS)
|
||||||
|
✅ **Input Validation** - 25-character limit with real-time validation
|
||||||
|
✅ **PDF Backup** - All generated labels automatically saved
|
||||||
|
|
||||||
|
## Printer Setup
|
||||||
|
|
||||||
|
### Windows
|
||||||
|
1. Go to Settings → Devices → Printers & Scanners
|
||||||
|
2. Add your label printer
|
||||||
|
3. Run the app - printer will be auto-detected
|
||||||
|
4. Select printer from dropdown
|
||||||
|
|
||||||
|
### Alternative (No Printer)
|
||||||
|
- Select "PDF" option
|
||||||
|
- Labels will be saved to `pdf_backup/` folder
|
||||||
|
- Open and print from any PDF viewer
|
||||||
|
|
||||||
|
## Troubleshooting
|
||||||
|
|
||||||
|
### "No Printers Found"
|
||||||
|
- This is normal - select "PDF" option
|
||||||
|
- You can print PDFs manually from the backup folder
|
||||||
|
- Or install your printer driver
|
||||||
|
|
||||||
|
### Windows Defender Warning
|
||||||
|
- Click "More info" → "Run anyway"
|
||||||
|
- This is safe - the app is open-source
|
||||||
|
|
||||||
|
### Missing Dependencies
|
||||||
|
```bash
|
||||||
|
pip install --upgrade pip
|
||||||
|
pip install -r requirements_windows.txt
|
||||||
|
```
|
||||||
|
|
||||||
|
### Port Already in Use
|
||||||
|
If you get an error about ports, restart your computer or:
|
||||||
|
```bash
|
||||||
|
python -m pip uninstall -y pywin32
|
||||||
|
python -m pip install pywin32
|
||||||
|
```
|
||||||
|
|
||||||
|
## File Structure
|
||||||
|
|
||||||
|
```
|
||||||
|
Label-design/
|
||||||
|
├── label_printer_gui.py # Main GUI application
|
||||||
|
├── print_label.py # Print functionality
|
||||||
|
├── print_label_pdf.py # PDF generation
|
||||||
|
├── requirements_windows.txt # Windows dependencies
|
||||||
|
├── pdf_backup/ # Stored PDF labels
|
||||||
|
├── venv/ # Virtual environment
|
||||||
|
└── documentation/ # Documentation files
|
||||||
|
```
|
||||||
|
|
||||||
|
## Tips
|
||||||
|
|
||||||
|
- **Character Limit**: Each field supports up to 25 characters (barcode limit)
|
||||||
|
- **Quantity Field**: Only numbers allowed
|
||||||
|
- **PDF Backup**: All labels automatically saved with timestamp
|
||||||
|
- **Cross-Platform**: Same code runs on Windows, Linux, and macOS
|
||||||
|
|
||||||
|
For more information, see the documentation folder.
|
||||||
5
documentation/requirements_windows.txt
Normal file
5
documentation/requirements_windows.txt
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
python-barcode
|
||||||
|
pillow
|
||||||
|
reportlab
|
||||||
|
kivy
|
||||||
|
pywin32
|
||||||
61
label_printer.spec
Normal file
61
label_printer.spec
Normal file
@@ -0,0 +1,61 @@
|
|||||||
|
# -*- mode: python ; coding: utf-8 -*-
|
||||||
|
"""
|
||||||
|
PyInstaller spec file for Label Printer GUI
|
||||||
|
This creates a standalone Windows executable
|
||||||
|
"""
|
||||||
|
|
||||||
|
a = Analysis(
|
||||||
|
['label_printer_gui.py'],
|
||||||
|
pathex=[],
|
||||||
|
binaries=[],
|
||||||
|
datas=[],
|
||||||
|
hiddenimports=[
|
||||||
|
'kivy',
|
||||||
|
'kivy.core.window',
|
||||||
|
'kivy.core.text',
|
||||||
|
'kivy.core.image',
|
||||||
|
'kivy.uix.boxlayout',
|
||||||
|
'kivy.uix.gridlayout',
|
||||||
|
'kivy.uix.label',
|
||||||
|
'kivy.uix.textinput',
|
||||||
|
'kivy.uix.button',
|
||||||
|
'kivy.uix.spinner',
|
||||||
|
'kivy.uix.scrollview',
|
||||||
|
'kivy.uix.popup',
|
||||||
|
'kivy.clock',
|
||||||
|
'kivy.graphics',
|
||||||
|
'PIL',
|
||||||
|
'barcode',
|
||||||
|
'reportlab',
|
||||||
|
],
|
||||||
|
hookspath=[],
|
||||||
|
hooksconfig={},
|
||||||
|
runtime_hooks=[],
|
||||||
|
excludedimports=[],
|
||||||
|
noarchive=False,
|
||||||
|
)
|
||||||
|
|
||||||
|
pyz = PYZ(a.pure, a.zipped_data, cipher=None)
|
||||||
|
|
||||||
|
exe = EXE(
|
||||||
|
pyz,
|
||||||
|
a.scripts,
|
||||||
|
a.binaries,
|
||||||
|
a.zipfiles,
|
||||||
|
a.datas,
|
||||||
|
[],
|
||||||
|
name='LabelPrinter',
|
||||||
|
debug=False,
|
||||||
|
bootloader_ignore_signals=False,
|
||||||
|
strip=False,
|
||||||
|
upx=True,
|
||||||
|
upx_exclude=[],
|
||||||
|
runtime_tmpdir=None,
|
||||||
|
console=False, # No console window
|
||||||
|
disable_windowed_traceback=False,
|
||||||
|
argv_emulation=False,
|
||||||
|
target_arch=None,
|
||||||
|
codesign_identity=None,
|
||||||
|
entitlements_file=None,
|
||||||
|
icon=None,
|
||||||
|
)
|
||||||
@@ -18,7 +18,8 @@ from kivy.graphics import Color, Rectangle
|
|||||||
|
|
||||||
import os
|
import os
|
||||||
import threading
|
import threading
|
||||||
from print_label import print_label_standalone
|
import platform
|
||||||
|
from print_label import print_label_standalone, get_available_printers
|
||||||
from kivy.clock import Clock
|
from kivy.clock import Clock
|
||||||
|
|
||||||
# Set window size - portrait/phone dimensions (375x667 like iPhone)
|
# Set window size - portrait/phone dimensions (375x667 like iPhone)
|
||||||
@@ -37,15 +38,8 @@ class LabelPrinterApp(App):
|
|||||||
self.available_printers = self.get_available_printers()
|
self.available_printers = self.get_available_printers()
|
||||||
|
|
||||||
def get_available_printers(self):
|
def get_available_printers(self):
|
||||||
"""Get list of available printers from CUPS"""
|
"""Get list of available printers (cross-platform)"""
|
||||||
try:
|
return get_available_printers()
|
||||||
import cups
|
|
||||||
conn = cups.Connection()
|
|
||||||
printers = conn.getPrinters()
|
|
||||||
return list(printers.keys()) if printers else ["PDF"]
|
|
||||||
except Exception as e:
|
|
||||||
print(f"Error getting printers: {e}")
|
|
||||||
return ["PDF"]
|
|
||||||
|
|
||||||
def build(self):
|
def build(self):
|
||||||
"""Build the simplified single-column UI"""
|
"""Build the simplified single-column UI"""
|
||||||
|
|||||||
169
print_label.py
169
print_label.py
@@ -1,31 +1,75 @@
|
|||||||
from PIL import Image, ImageDraw, ImageFont
|
from PIL import Image, ImageDraw, ImageFont
|
||||||
import barcode
|
import barcode
|
||||||
from barcode.writer import ImageWriter
|
from barcode.writer import ImageWriter
|
||||||
import cups, time, os, datetime
|
import time
|
||||||
|
import os
|
||||||
|
import datetime
|
||||||
|
import platform
|
||||||
|
import subprocess
|
||||||
from print_label_pdf import PDFLabelGenerator
|
from print_label_pdf import PDFLabelGenerator
|
||||||
|
|
||||||
#functie de printare etichete pe un printer specificat cu un preview opțional
|
# Cross-platform printer support
|
||||||
# Aceasta funcție creează o imagine cu un cod de bare și text, apoi o trimite la imprimantă.
|
try:
|
||||||
# Dacă este specificat un preview, afișează o fereastră de previzualizare înainte de a imprima.
|
import cups
|
||||||
# Dimensiunea etichetei este de 9x5 cm la 300 DPI, cu un cadru exterior și două cadre interioare pentru codul de bare și text.
|
CUPS_AVAILABLE = True
|
||||||
# Codul de bare este generat folosind formatul Code128, iar textul este afișat sub codul de bare cu
|
except ImportError:
|
||||||
# o dimensiune de font maximizată pentru a se potrivi în cadrul textului
|
CUPS_AVAILABLE = False
|
||||||
# Imaginile sunt create folosind biblioteca PIL, iar imprimarea se face prin intermediul
|
|
||||||
# bibliotecii CUPS pentru gestionarea imprimantelor.
|
|
||||||
# Această funcție este utilă pentru a crea etichete personalizate cu coduri de bare și text, care pot fi utilizate în diverse aplicații, cum ar fi etichetarea produselor, inventariere sau organizarea documentelor
|
|
||||||
#mod de utilizare in cadrul unui program se copie fisierul print_label.py in directorul de lucru
|
|
||||||
# si se apeleaza functia print_label_standalone cu parametrii corespunzători:
|
|
||||||
# - value: textul de afișat pe etichetă
|
|
||||||
# - printer: numele imprimantei pe care se va face printarea
|
|
||||||
# - preview: 0 pentru a nu afișa previzualizarea, 1-3 pentru o previzualizare de 3 secunde, >3 pentru o previzualizare de 5 secunde
|
|
||||||
|
|
||||||
# se recomanda instalarea si setarea imprimantei in sistemul de operare
|
try:
|
||||||
# pentru a putea fi utilizata de catre biblioteca CUPS
|
import win32api
|
||||||
# se verifica proprietatile imprimantei in cups sa fie setata dimensiunea corecta a etichetei
|
import win32print
|
||||||
# pentru a instala biblioteca barcode se foloseste comanda pip install python-barcode
|
WIN32_AVAILABLE = True
|
||||||
# pentru a instala biblioteca PIL se foloseste comanda pip install pillow
|
except ImportError:
|
||||||
# pentru a instala biblioteca CUPS se foloseste comanda pip install pycups
|
WIN32_AVAILABLE = False
|
||||||
# pentru a instala biblioteca Tkinter se foloseste comanda sudo apt-get install python3-tk
|
|
||||||
|
SYSTEM = platform.system() # 'Linux', 'Windows', 'Darwin'
|
||||||
|
|
||||||
|
|
||||||
|
def get_available_printers():
|
||||||
|
"""
|
||||||
|
Get list of available printers (cross-platform).
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
list: List of available printer names, with "PDF" as fallback
|
||||||
|
"""
|
||||||
|
try:
|
||||||
|
if SYSTEM == "Linux" and CUPS_AVAILABLE:
|
||||||
|
# Linux: Use CUPS
|
||||||
|
conn = cups.Connection()
|
||||||
|
printers = conn.getPrinters()
|
||||||
|
return list(printers.keys()) if printers else ["PDF"]
|
||||||
|
|
||||||
|
elif SYSTEM == "Windows":
|
||||||
|
# Windows: Try win32print first
|
||||||
|
try:
|
||||||
|
printers = []
|
||||||
|
for printer_name in win32print.EnumPrinters(win32print.PRINTER_ENUM_LOCAL):
|
||||||
|
printers.append(printer_name[2])
|
||||||
|
return printers if printers else ["PDF"]
|
||||||
|
except:
|
||||||
|
# Fallback for Windows if win32print fails
|
||||||
|
return ["PDF"]
|
||||||
|
|
||||||
|
elif SYSTEM == "Darwin":
|
||||||
|
# macOS: Use lpstat command
|
||||||
|
try:
|
||||||
|
result = subprocess.run(["lpstat", "-p", "-d"],
|
||||||
|
capture_output=True, text=True)
|
||||||
|
printers = []
|
||||||
|
for line in result.stdout.split('\n'):
|
||||||
|
if line.startswith('printer'):
|
||||||
|
printer_name = line.split()[1]
|
||||||
|
printers.append(printer_name)
|
||||||
|
return printers if printers else ["PDF"]
|
||||||
|
except:
|
||||||
|
return ["PDF"]
|
||||||
|
|
||||||
|
else:
|
||||||
|
return ["PDF"]
|
||||||
|
|
||||||
|
except Exception as e:
|
||||||
|
print(f"Error getting printers: {e}")
|
||||||
|
return ["PDF"]
|
||||||
|
|
||||||
|
|
||||||
def create_label_image(text):
|
def create_label_image(text):
|
||||||
@@ -164,6 +208,71 @@ def create_label_pdf(text):
|
|||||||
return generator.create_label_pdf(sap_nr, cantitate, lot_number, pdf_filename)
|
return generator.create_label_pdf(sap_nr, cantitate, lot_number, pdf_filename)
|
||||||
|
|
||||||
|
|
||||||
|
def print_to_printer(printer_name, file_path):
|
||||||
|
"""
|
||||||
|
Print file to printer (cross-platform).
|
||||||
|
|
||||||
|
Args:
|
||||||
|
printer_name (str): Name of printer or "PDF" for PDF output
|
||||||
|
file_path (str): Path to file to print
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
bool: True if successful
|
||||||
|
"""
|
||||||
|
try:
|
||||||
|
if printer_name == "PDF":
|
||||||
|
# PDF output - file is already saved
|
||||||
|
print(f"PDF output: {file_path}")
|
||||||
|
return True
|
||||||
|
|
||||||
|
elif SYSTEM == "Linux" and CUPS_AVAILABLE:
|
||||||
|
# Linux: Use CUPS
|
||||||
|
conn = cups.Connection()
|
||||||
|
conn.printFile(printer_name, file_path, "Label Print", {})
|
||||||
|
print(f"Label sent to printer: {printer_name}")
|
||||||
|
return True
|
||||||
|
|
||||||
|
elif SYSTEM == "Windows":
|
||||||
|
# Windows: Use win32print or open with default printer
|
||||||
|
try:
|
||||||
|
if WIN32_AVAILABLE:
|
||||||
|
import win32print
|
||||||
|
import win32api
|
||||||
|
# Print using the Windows API
|
||||||
|
win32api.ShellExecute(0, "print", file_path, f'/d:"{printer_name}"', ".", 0)
|
||||||
|
print(f"Label sent to printer: {printer_name}")
|
||||||
|
return True
|
||||||
|
else:
|
||||||
|
# Fallback: Open with default printer
|
||||||
|
if file_path.endswith('.pdf'):
|
||||||
|
os.startfile(file_path, "print")
|
||||||
|
else:
|
||||||
|
# For images, use default print application
|
||||||
|
subprocess.run([f'notepad', '/p', file_path], check=False)
|
||||||
|
print(f"Label sent to default printer")
|
||||||
|
return True
|
||||||
|
except Exception as e:
|
||||||
|
print(f"Windows print error: {e}")
|
||||||
|
print("PDF backup saved as fallback")
|
||||||
|
return True
|
||||||
|
|
||||||
|
elif SYSTEM == "Darwin":
|
||||||
|
# macOS: Use lp command
|
||||||
|
subprocess.run(["lp", "-d", printer_name, file_path], check=True)
|
||||||
|
print(f"Label sent to printer: {printer_name}")
|
||||||
|
return True
|
||||||
|
|
||||||
|
else:
|
||||||
|
print(f"Unsupported system: {SYSTEM}")
|
||||||
|
return False
|
||||||
|
|
||||||
|
except Exception as e:
|
||||||
|
print(f"Printer error: {str(e)}")
|
||||||
|
print("Label already saved to file as fallback...")
|
||||||
|
print(f"Label file: {file_path}")
|
||||||
|
return True
|
||||||
|
|
||||||
|
|
||||||
def print_label_standalone(value, printer, preview=0, use_pdf=True):
|
def print_label_standalone(value, printer, preview=0, use_pdf=True):
|
||||||
"""
|
"""
|
||||||
Print a label with the specified text on the specified printer.
|
Print a label with the specified text on the specified printer.
|
||||||
@@ -226,23 +335,11 @@ def print_label_standalone(value, printer, preview=0, use_pdf=True):
|
|||||||
|
|
||||||
# Print after preview
|
# Print after preview
|
||||||
print("Sending to printer...")
|
print("Sending to printer...")
|
||||||
conn = cups.Connection()
|
return print_to_printer(printer, temp_file)
|
||||||
conn.printFile(printer, temp_file, "Label Print", {})
|
|
||||||
return True
|
|
||||||
else:
|
else:
|
||||||
print("Direct printing without preview...")
|
print("Direct printing without preview...")
|
||||||
# Direct printing without preview (preview = 0)
|
# Direct printing without preview (preview = 0)
|
||||||
try:
|
return print_to_printer(printer, temp_file)
|
||||||
conn = cups.Connection()
|
|
||||||
conn.printFile(printer, temp_file, "Label Print", {})
|
|
||||||
print(f"Label sent to printer: {printer}")
|
|
||||||
return True
|
|
||||||
except Exception as e:
|
|
||||||
# If printing fails, save to file as fallback
|
|
||||||
print(f"Printer error: {str(e)}")
|
|
||||||
print("Label already saved to file as fallback...")
|
|
||||||
print(f"Label file: {temp_file}")
|
|
||||||
return True
|
|
||||||
|
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
print(f"Error printing label: {str(e)}")
|
print(f"Error printing label: {str(e)}")
|
||||||
|
|||||||
Reference in New Issue
Block a user