DEV Community

Cover image for 🧩 Building a Powerful Multi-Threaded PDF Downloader with Tkinter and Python
Srijan Kumar
Srijan Kumar

Posted on

🧩 Building a Powerful Multi-Threaded PDF Downloader with Tkinter and Python

In today’s digital workspace, managing multiple document downloads can become chaotic β€” especially when handling dozens of PDF files.

To simplify this process, I developed a Tkinter-based Multi-Threaded PDF Downloader using Python.

This tool enables concurrent downloads, real-time speed monitoring, and pause/resume control β€” all inside a simple yet professional GUI interface.


πŸ”— GitHub Repository: Srijan-XI/PDF-Downloader

Pre-view

πŸš€ Introduction

The PDF Downloader project merges simplicity and performance to create a powerful, user-friendly desktop application.

It uses Python’s threading for parallel downloads, Tkinter for the GUI, and PyInstaller for cross-platform builds. Whether you’re a student, researcher, or engineer β€” this tool helps automate your workflow efficiently.


✨ Key Features

  • ⚑ Concurrent Downloads β€” Download multiple PDFs at once (1–10 threads).
  • 🌐 Live Network Speed Display β€” Monitors download speed dynamically.
  • ⏯ Pause/Resume β€” Stop and continue downloads seamlessly.
  • πŸ” Recursive File Discovery β€” Detects PDFs inside nested directories.
  • πŸ“Š Progress Tracking β€” Visual progress bars with precise logging.
  • πŸͺŸ Custom Icon Branding β€” Unified design for GUI and executables.
  • πŸ’» Cross-Platform β€” Works smoothly on Windows, Linux, and macOS.

πŸ—‚ Project Structure

A clean and modular architecture makes this project easy to maintain and extend:

Pdf Downloader/
β”œβ”€β”€ pdf_downloads.py # Core application logic
β”œβ”€β”€ requirements.txt # Dependencies
β”œβ”€β”€ run.bat / run.sh # Launchers for each platform
β”œβ”€β”€ scripts/
β”‚ β”œβ”€β”€ build_exe.ps1 # Windows build automation
β”‚ β”œβ”€β”€ build_app.sh # Linux/macOS build
β”‚ └── convert_icon.py # Converts icons to .ico
β”œβ”€β”€ icon/logo_pdf.png # Application logo
β”œβ”€β”€ docs/ # Documentation files
└── dist/ / build/ / venv/ # Generated directories
Enter fullscreen mode Exit fullscreen mode

βš™οΈ Installation and Setup

πŸͺŸ Windows

Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope Process
.\scripts\build_exe.ps1
.\run.bat
Enter fullscreen mode Exit fullscreen mode

🐧 Linux / macOS

chmod +x scripts/build_app.sh run.sh
./scripts/build_app.sh
./run.sh
Enter fullscreen mode Exit fullscreen mode

Within minutes, the application compiles and launches seamlessly.

🧰 Build from Source

You can also manually build the application from source using your terminal:


Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope Process
.\scripts\build_exe.ps1
Enter fullscreen mode Exit fullscreen mode

chmod +x scripts/build_app.sh
./scripts/build_app.sh
Enter fullscreen mode Exit fullscreen mode

The compiled application will appear inside the /dist/ folder, fully portable and ready to use.


πŸ“¦ Dependencies

The project uses lightweight and efficient libraries:

  • requests β†’ For downloading files

  • beautifulsoup4 β†’ For parsing HTML and locating links

  • pillow β†’ For image/icon processing

  • pyinstaller β†’ For building standalone executables

All dependencies are installed automatically during the build process.

πŸ’» Manual Build with PyInstaller

If you want full control, build manually:


pyinstaller --noconfirm --onefile --windowed --icon=icon\logo_pdf.ico --add-data "icon;icon" --name "pdf_downloader" pdf_downloads.py
Enter fullscreen mode Exit fullscreen mode

pyinstaller --noconfirm --onefile --windowed --icon=icon/logo_pdf.ico --add-data "icon:icon" --name "pdf_downloader" pdf_downloads.py
Enter fullscreen mode Exit fullscreen mode

Note: Use ; for Windows and : for Linux/macOS in --add-data.

🧩 Debugging and Logging

By default, the app runs in GUI (windowed) mode.
If you want to view console logs for debugging, remove the --windowed flag from your PyInstaller command.

🌍 Cross-Platform Performance

This project has been tested on:

  • πŸͺŸ Windows 10/11

  • 🐧 Ubuntu / Fedora

  • 🍏 macOS Sonoma / Ventura

Performance and UI remain consistent across platforms.

🀝 Contributing

Community contributions are welcome!

If you’d like to report bugs, suggest improvements, or contribute features, visit the repository:

πŸ‘‰ https://github.com/Srijan-XI/PDF-Downloader
Enter fullscreen mode Exit fullscreen mode

Fork the repo, experiment, and share your enhancements!

πŸ“œ License & Credits

This project is open-source and available for both personal and commercial use.

Created and maintained by Srijan | Srijanxi Technologies.
Built with dedication, precision, and a belief that every tool β€” no matter how small β€” deserves thoughtful engineering.

β€œBuilt for efficiency. Engineered for reliability. Inspired by innovation.”

βœ… Explore the Full Project on GitHub:
πŸ”— github.com/Srijan-XI/PDF-Downloader

Top comments (1)

Collapse
 
jahongir2007 profile image
Jahongir Sobirov

Nice