Amazing-Python-Scripts
263 строки · 7.1 Кб
1from tkinter import *
2import os
3import time
4import threading
5from mutagen.mp3 import MP3
6from tkinter import filedialog
7import tkinter.messagebox
8from tkinter import ttk # to improve the styles of buttons and widgets
9from ttkthemes import themed_tk as tk
10from pygame import mixer
11
12
13def show_Details(play_it):
14Main_text['text'] = 'Playing.....' + ' ' + os.path.basename(play_it)
15Main_text['anchor'] = 'e'
16file_ext = os.path.splitext(play_it)
17if file_ext[1] == '.mp3': # To handle mp3 files using mutagen
18audio_lenth = MP3(play_it)
19total_lenth = audio_lenth.info.length
20else: # to handle .wav,.ogg music file extensions
21a = mixer.Sound(play_it)
22total_lenth = a.get_length()
23
24m, s = divmod(total_lenth, 60)
25m = round(m)
26s = round(s)
27
28time_format = '{:02d}:{:02d}'.format(m, s)
29Main_lenth['text'] = 'Duration : '+' '+time_format
30thread1 = threading.Thread(target=rem_count, args=(total_lenth,))
31thread1.start()
32
33
34def rem_count(total_lenth):
35global paused
36curr_secs = 0
37while curr_secs <= total_lenth and mixer.music.get_busy():
38if paused:
39continue
40else:
41m, s = divmod(curr_secs, 60)
42m = round(m)
43s = round(s)
44m1, s1 = divmod(total_lenth, 60)
45m1 = round(m1)
46s1 = round(s1)
47
48time_format = '{:02d}:{:02d}'.format(m, s)
49time_format1 = '{:02d}:{:02d}'.format(m1, s1)
50current_lenth['text'] = 'Cuurent Duration : ' + ' ' + time_format
51time.sleep(1)
52curr_secs += 1
53total_lenth -= 1
54
55
56def Play_music():
57global paused
58if paused:
59mixer.music.unpause()
60# global paused = FALSE
61status_bar['text'] = 'Playing Music.....' + \
62' ' + os.path.basename(music_file)
63status_bar['anchor'] = 'w'
64paused = FALSE
65else:
66try:
67Stop_music()
68time.sleep(1)
69song = play_list.curselection()
70song = int(song[0])
71play_it = music_list[song]
72
73mixer.music.load(play_it)
74mixer.music.play()
75status_bar['text'] = 'Playing Music.....' + \
76' ' + os.path.basename(play_it)
77status_bar['anchor'] = 'w'
78show_Details(play_it)
79except:
80tkinter.messagebox.showerror("Error", "File Not Selected")
81
82
83def Stop_music():
84mixer.music.stop()
85status_bar['text'] = 'Music Stopped'
86status_bar['anchor'] = 'e'
87
88
89paused = FALSE
90
91
92def pause_music():
93global paused
94paused = TRUE
95mixer.music.pause()
96status_bar['text'] = 'Music Paused...'
97status_bar['anchor'] = 'e'
98
99
100def rewind_music():
101Play_music()
102status_bar['text'] = 'Music Rewinded...'+' '+os.path.basename(music_file)
103status_bar['anchor'] = 'e'
104
105
106def close_window_fully():
107Stop_music()
108exit()
109
110
111def set_vol(val):
112vol = float(val)/100
113mixer.music.set_volume(vol)
114
115
116def about_us():
117tkinter.messagebox.showinfo(
118'About Rockerz', 'This Is A Music Player Devloped With Python Tkinter And Pygame By Robin Singh')
119
120
121def browse_files():
122global music_file
123music_file = filedialog.askopenfilename()
124add_to_listbox(music_file)
125
126
127music_list = []
128
129
130def add_to_listbox(music_file):
131file_name = os.path.basename(music_file)
132index = 0
133play_list.insert(index, file_name)
134music_list.insert(index, music_file)
135play_list.pack()
136index += 1
137
138
139def delete_btn():
140song = play_list.curselection()
141song = int(song[0])
142play_list.delete(song)
143music_list.pop(song)
144
145
146def mute_music():
147global muted
148if muted:
149mixer.music.set_volume(.7)
150vol_button1.configure(image=pic5)
151scale1.set(70)
152muted = FALSE
153
154else:
155mixer.music.set_volume(0)
156vol_button1.configure(image=pic4)
157scale1.set(0)
158muted = TRUE
159
160
161def close_window_fully1():
162Stop_music()
163exit()
164
165
166muted = FALSE
167
168
169main_window = tk.ThemedTk()
170main_window.get_themes()
171# themes : 'arc','radiance','breeze','ubuntu' etc
172main_window.set_theme("breeze")
173# creating toolbar
174tool_bar = Menu(main_window)
175main_window.config(menu=tool_bar)
176
177status_bar = ttk.Label(main_window, text="Welcome To Rockerzz",
178relief=SUNKEN, anchor=W, font='verdana 10 italic')
179status_bar.pack(side=BOTTOM, fill=X)
180
181# creating sub menus
182sub_menu = Menu(tool_bar, tearoff=0) # to remove dashed line from menu
183tool_bar.add_cascade(label='File', menu=sub_menu)
184sub_menu.add_command(label="Open", command=browse_files)
185sub_menu.add_command(label="Exit", command=close_window_fully1)
186
187sub_menu = Menu(tool_bar, tearoff=0) # to remove dashed line from menu
188tool_bar.add_cascade(label='Help', menu=sub_menu)
189sub_menu.add_command(label="About Us ", command=about_us)
190
191
192mixer.init()
193
194# main_window.geometry("600x300")
195main_window.title("Rockerz")
196main_window.iconbitmap("./Music-Player-App/assests/rockerz.ico")
197
198left_frame = Frame(main_window)
199left_frame.pack(side=RIGHT, padx=30, pady=20)
200play_list = Listbox(left_frame)
201play_list.pack()
202
203
204add_btn = ttk.Button(left_frame, text='ADD', command=browse_files)
205add_btn.pack(side=LEFT, padx=3)
206
207del_btn = ttk.Button(left_frame, text='DELETE', command=delete_btn)
208del_btn.pack(side=LEFT)
209
210right_frame = Frame(main_window)
211right_frame.pack(pady=20)
212
213r_top_frame = Frame(right_frame)
214r_top_frame.pack()
215
216Main_text = ttk.Label(
217r_top_frame, text="Devloped By Robin Singh", font='arial 10 italic')
218Main_text.pack()
219
220Main_lenth = ttk.Label(r_top_frame, text="Length : --:--", relief=GROOVE)
221Main_lenth.pack(pady=5)
222
223current_lenth = ttk.Label(
224r_top_frame, text="Current Duration : --:--", relief=GROOVE)
225current_lenth.pack()
226
227playlist_box = Listbox(main_window)
228canvas = Frame(right_frame)
229canvas.pack(pady=5)
230
231pic = PhotoImage(file="./Music-Player-App/assests/images/play.png")
232play_button1 = ttk.Button(canvas, image=pic, command=Play_music)
233play_button1.grid(row=0, column=0, padx=5)
234
235pic1 = PhotoImage(file="./Music-Player-App/assests/images/stop.png")
236stop_button1 = ttk.Button(canvas, image=pic1, command=Stop_music)
237stop_button1.grid(row=0, column=1, padx=5)
238
239pic2 = PhotoImage(file="./Music-Player-App/assests/images/pause.png")
240pause_button1 = ttk.Button(canvas, image=pic2, command=pause_music)
241pause_button1.grid(row=0, column=2, padx=5)
242
243bottom_canvas = Frame(right_frame)
244bottom_canvas.pack(padx=30, pady=30)
245pic3 = PhotoImage(file="./Music-Player-App/assests/images/rewind.png")
246rewind_button1 = ttk.Button(bottom_canvas, image=pic3, command=rewind_music)
247rewind_button1.grid(row=0, column=0, pady=10)
248
249pic4 = PhotoImage(file="./Music-Player-App/assests/images/002-mute.png")
250pic5 = PhotoImage(file="./Music-Player-App/assests/images/001-volume.png")
251vol_button1 = ttk.Button(bottom_canvas, image=pic5, command=mute_music)
252vol_button1.grid(row=0, column=1)
253
254
255scale1 = ttk.Scale(bottom_canvas, from_=0, to=100,
256orient=HORIZONTAL, command=set_vol)
257scale1.set(50)
258mixer.music.set_volume(.5)
259scale1.grid(row=0, column=3, padx=5, pady=10)
260
261# For overriding close button
262main_window.protocol("WM_DELETE_WINDOW", close_window_fully)
263main_window.mainloop()
264