Basic Music Player Project: Tkinter vs PyQt5 Solutions for Python
Basic Music Player:
Build a simple music player that plays local audio files.
Input values:
User interacts with the music player by selecting audio files to play, controlling playback (play, pause, stop), and adjusting volume.
Output value:
Audio files are played with a visual representation of playback controls and volume adjustments.
Example:
Input values: 1. Select the audio file: "song1.mp3" 2. Click the play button Output value: Music player displays playback controls and starts playing "song1.mp3". Input values: 3. Pause playback Output value: Music player pauses playback at the current position. Input values: 4. Select the audio file: "song2.mp3" 5. Click the play button Output value: Music player displays playback controls and starts playing "song2.mp3". Input values: 6. Stop playback Output value: Music player stops playback, and the playback position resets. Input values: 7. Adjust the volume to 75% Output value: Music player adjusts the volume to 75%.
Here are two different solutions for building a "Basic Music Player" in Python. The music player will allow users to select audio files, control playback (play, pause, stop), and adjust volume.
Solution 1: Using Tkinter and Pygame
Code:
# Solution 1: Basic Music Player Using Tkinter and Pygame
import tkinter as tk # Import tkinter for GUI
from tkinter import filedialog # Import filedialog to open file selection dialog
from pygame import mixer # Import mixer module from pygame for audio playback
class MusicPlayer:
"""Class to create a simple music player with Tkinter and Pygame."""
def __init__(self, root):
"""Initialize the MusicPlayer with a Tkinter root window."""
self.root = root
self.root.title("Basic Music Player")
self.root.geometry("300x200")
# Initialize Pygame mixer
mixer.init()
# Set up GUI elements
self.setup_ui()
# Initialize playback state
self.current_file = None
self.paused = False
def setup_ui(self):
"""Set up the user interface with buttons and a volume slider."""
# Button to open an audio file
self.open_btn = tk.Button(self.root, text="Open", command=self.open_file)
self.open_btn.pack(pady=5)
# Button to play the audio
self.play_btn = tk.Button(self.root, text="Play", command=self.play_music)
self.play_btn.pack(pady=5)
# Button to pause the audio
self.pause_btn = tk.Button(self.root, text="Pause", command=self.pause_music)
self.pause_btn.pack(pady=5)
# Button to stop the audio
self.stop_btn = tk.Button(self.root, text="Stop", command=self.stop_music)
self.stop_btn.pack(pady=5)
# Volume slider to adjust volume
self.volume_slider = tk.Scale(self.root, from_=0, to=100, orient="horizontal", command=self.set_volume)
self.volume_slider.set(50) # Set initial volume to 50%
self.volume_slider.pack(pady=5)
def open_file(self):
"""Open a file selection dialog to select an audio file."""
self.current_file = filedialog.askopenfilename(filetypes=[("Audio Files", "*.mp3 *.wav *.ogg")])
def play_music(self):
"""Play the selected audio file."""
if self.current_file:
if self.paused:
mixer.music.unpause() # Resume playing if paused
self.paused = False
else:
mixer.music.load(self.current_file) # Load the selected file
mixer.music.play() # Start playing
def pause_music(self):
"""Pause the audio playback."""
if not self.paused:
mixer.music.pause() # Pause the playback
self.paused = True
def stop_music(self):
"""Stop the audio playback."""
mixer.music.stop() # Stop the playback
def set_volume(self, value):
"""Set the volume of the audio playback."""
volume = int(value) / 100 # Convert slider value to a float between 0 and 1
mixer.music.set_volume(volume)
# Create a Tkinter window
root = tk.Tk()
# Create an instance of the MusicPlayer class
player = MusicPlayer(root)
# Start the Tkinter event loop
root.mainloop()
Output:
Explanation:
- Tkinter GUI:
- Tkinter is used to create a simple user interface with buttons (Open, Play, Pause, Stop) and a volume slider.
- Pygame Mixer:
- Pygame's mixer module is initialized to handle audio playback.
- open_file(): Allows the user to select an audio file.
- play_music(): Plays or resumes the selected audio file.
- pause_music(): Pauses the currently playing audio.
- stop_music(): Stops the audio and resets playback.
- set_volume(): Adjusts the volume using the slider value.
- Advantages: Lightweight and simple to use, easy to implement and understand, uses a familiar GUI library.
Solution 2: Using PyQt5
Code:
# Solution 2: Basic Music Player Using PyQt5 with Buttons at the Bottom
from PyQt5.QtWidgets import QApplication, QMainWindow, QPushButton, QSlider, QFileDialog, QVBoxLayout, QWidget, QSpacerItem, QSizePolicy
from PyQt5.QtMultimedia import QMediaPlayer, QMediaContent
from PyQt5.QtCore import Qt, QUrl
class MusicPlayer(QMainWindow):
"""Class to create a simple music player with PyQt5."""
def __init__(self):
"""Initialize the MusicPlayer with a PyQt5 main window."""
super().__init__()
self.setWindowTitle("Basic Music Player")
self.setGeometry(100, 100, 300, 400)
# Initialize the media player
self.media_player = QMediaPlayer()
# Set up the user interface
self.setup_ui()
def setup_ui(self):
"""Set up the user interface with buttons and a volume slider."""
# Main widget and layout
main_widget = QWidget()
main_layout = QVBoxLayout()
# Spacer item to push buttons to the bottom
spacer = QSpacerItem(20, 40, QSizePolicy.Minimum, QSizePolicy.Expanding)
main_layout.addItem(spacer)
# Layout for buttons at the bottom
button_layout = QVBoxLayout()
# Open button
open_btn = QPushButton("Open")
open_btn.clicked.connect(self.open_file)
button_layout.addWidget(open_btn)
# Play button
play_btn = QPushButton("Play")
play_btn.clicked.connect(self.media_player.play)
button_layout.addWidget(play_btn)
# Pause button
pause_btn = QPushButton("Pause")
pause_btn.clicked.connect(self.media_player.pause)
button_layout.addWidget(pause_btn)
# Stop button
stop_btn = QPushButton("Stop")
stop_btn.clicked.connect(self.media_player.stop)
button_layout.addWidget(stop_btn)
# Volume slider
volume_slider = QSlider(Qt.Horizontal)
volume_slider.setRange(0, 100)
volume_slider.setValue(50)
volume_slider.valueChanged.connect(self.set_volume)
button_layout.addWidget(volume_slider)
# Add button layout to the main layout
main_layout.addLayout(button_layout)
# Set the main layout to the central widget
main_widget.setLayout(main_layout)
self.setCentralWidget(main_widget)
def open_file(self):
"""Open a file dialog to select an audio file."""
file_path, _ = QFileDialog.getOpenFileName(self, "Open Audio File", "", "Audio Files (*.mp3 *.wav *.ogg)")
if file_path:
self.media_player.setMedia(QMediaContent(QUrl.fromLocalFile(file_path)))
def set_volume(self, value):
"""Set the volume of the audio playback."""
self.media_player.setVolume(value)
# Run the PyQt5 application
app = QApplication([])
window = MusicPlayer()
window.show()
app.exec_()
Output:
Explanation:
- Main Layout (main_layout):
- This layout is created to hold the main content of the window.
- A spacer (QSpacerItem) is added at the top to push the button layout to the bottom.
- Button Layout (button_layout):
- A QVBoxLayout is used to align all buttons and the volume slider vertically.
- All buttons (Open, Play, Pause, Stop) and the volume slider are added to this layout.
- Adding the Button Layout:
- The button_layout is added to the main_layout at the bottom.
- Widget Configuration:
- The main widget (main_widget) is set as the central widget of the main window.
Summary of Differences:
- Solution 1: Using Tkinter and Pygame
- Lightweight: Simple and easy to implement with basic GUI controls.
- Audio Handling: Uses Pygame for audio playback.
- Use Case: Suitable for small and simple applications with basic needs.
- Solution 2: Using PyQt5
- Advanced GUI: Provides a modern interface with PyQt5's features.
- Built-in Multimedia Support: Utilizes PyQt5's native multimedia capabilities (QMediaPlayer).
- Use Case: Better suited for more advanced applications requiring richer UIs and more features.
Both solutions provide a functional music player, but Solution 2 is more flexible and visually appealing, while Solution 1 offers a straightforward, minimal implementation.
It will be nice if you may share this link in any developer community or anywhere else, from where other developers may find this content. Thanks.
https://198.211.115.131/projects/python/python-basic-music-player-project.php
- Weekly Trends and Language Statistics
- Weekly Trends and Language Statistics