Compare commits
3 Commits
33c9c3d099
...
5e1cdfb9e5
| Author | SHA1 | Date | |
|---|---|---|---|
| 5e1cdfb9e5 | |||
| 8619debd71 | |||
| 184178275b |
@@ -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,
|
||||||
|
)
|
||||||
@@ -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! 🚀
|
||||||
@@ -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.
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
Binary file not shown.
File diff suppressed because it is too large
Load Diff
Binary file not shown.
File diff suppressed because it is too large
Load Diff
Binary file not shown.
File diff suppressed because it is too large
Load Diff
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -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)
|
||||||
File diff suppressed because it is too large
Load Diff
@@ -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
Binary file not shown.
@@ -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.
|
||||||
@@ -0,0 +1,5 @@
|
|||||||
|
python-barcode
|
||||||
|
pillow
|
||||||
|
reportlab
|
||||||
|
kivy
|
||||||
|
pywin32
|
||||||
@@ -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,
|
||||||
|
)
|
||||||
+4
-10
@@ -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"""
|
||||||
|
|||||||
+133
-36
@@ -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