Skip to content

Commit a739883

Browse files
committed
bez wątków i bezpieczne wątki inne massage boxy
1 parent d9add04 commit a739883

4 files changed

Lines changed: 87 additions & 32 deletions

File tree

custom_message_box.py

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
import customtkinter as ctk
2+
3+
is_active = False
4+
def custom_messagebox_panel(parent, message, show_cancel = False):
5+
global is_active
6+
7+
if is_active:
8+
return
9+
is_active = True
10+
11+
can_close = False
12+
result = None
13+
panel = ctk.CTkFrame(parent, fg_color="darkgray", corner_radius=0, height=150)
14+
panel.pack(fill="x", side="top")
15+
16+
message_label = ctk.CTkLabel(panel, text=message, font=("Arial", 14), text_color="white")
17+
message_label.pack(pady=(10, 0))
18+
def on_ok():
19+
nonlocal can_close
20+
nonlocal result
21+
result = True
22+
panel.pack_forget()
23+
can_close = True
24+
25+
26+
def on_cancel():
27+
nonlocal result
28+
nonlocal can_close
29+
result = False
30+
panel.pack_forget()
31+
can_close = True
32+
33+
34+
button_frame = ctk.CTkFrame(panel, fg_color="transparent")
35+
button_frame.pack(pady=(10, 10))
36+
37+
ok_button = ctk.CTkButton(button_frame, text="OK", command=on_ok)
38+
ok_button.grid(row=0, column=0, padx=10)
39+
40+
if show_cancel:
41+
cancel_button = ctk.CTkButton(button_frame, text="Cancel", command=on_cancel)
42+
cancel_button.grid(row=0, column=1, padx=10)
43+
44+
45+
parent.grab_set()
46+
47+
while not can_close:
48+
parent.update_idletasks()
49+
parent.after(100)
50+
parent.update()
51+
52+
parent.grab_release()
53+
is_active = False
54+
return result
55+
56+

global_vars.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
1+
import queue
2+
13
wave_canvas = None
24
canvas_image = None
35
image_id = None
6+
7+
wave_queue= queue.Queue()

milonga.py

Lines changed: 25 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ def new_Popen(*args, startupinfo=None, **kwargs):
5858
import tempfile
5959
from config import DEBUG
6060
import customtkinter
61-
from CTkMessagebox import CTkMessagebox
61+
from custom_message_box import custom_messagebox_panel
6262

6363
customtkinter.set_appearance_mode("light")
6464
customtkinter.set_default_color_theme("blue")
@@ -85,7 +85,8 @@ def new_Popen(*args, startupinfo=None, **kwargs):
8585

8686

8787
def about():
88-
CTkMessagebox(title="Info", message="Milonga DJ Soft - Paweł Wąsowicz")
88+
#CTkMessagebox(title="Info", message="Milonga DJ Soft - Paweł Wąsowicz",master=root)
89+
custom_messagebox_panel(parent=tree, message="Milonga DJ Soft - Paweł Wąsowicz")
8990

9091

9192
def export_playlist():
@@ -101,11 +102,8 @@ def export_playlist():
101102
def on_closing():
102103
global is_playing
103104
if is_playing:
104-
CTkMessagebox(
105-
title="Warning",
106-
message="Cannot close application while is playing.",
107-
icon="warning",
108-
)
105+
custom_messagebox_panel(parent=tree, message="Cannot close application while is playing.")
106+
109107
else:
110108
player.quit_device()
111109
player.delete_tmp_files()
@@ -340,19 +338,12 @@ def on_delete():
340338
selected_items = tree.selection()
341339

342340
if not selected_items:
343-
CTkMessagebox(title="None selected", message="Select rows.", icon="warning")
341+
custom_messagebox_panel(parent=tree, message="Select rows.")
344342
return
345343

346-
msg = CTkMessagebox(
347-
title="Confirmation",
348-
message=f"Delete {len(selected_items)} song(s)?",
349-
icon="question",
350-
option_1="No",
351-
option_2="Yes",
352-
)
353-
response = msg.get()
344+
res= custom_messagebox_panel(parent=tree, message=f"Delete {len(selected_items)} song(s)?",show_cancel=True)
354345

355-
if response == "Yes":
346+
if res:
356347
converted_files = player.get_converted_files()
357348
for item in selected_items:
358349
tree.delete(item)
@@ -395,17 +386,10 @@ def on_start():
395386
def on_stop():
396387
global is_playing
397388
global current_song
389+
res = custom_messagebox_panel(parent=tree, message="Stop playing?", show_cancel=True)
398390

399-
msg = CTkMessagebox(
400-
title="Confirmation",
401-
message="Stop playing?",
402-
icon="question",
403-
option_1="No",
404-
option_2="Yes",
405-
)
406-
response = msg.get()
407391

408-
if response == "Yes":
392+
if res:
409393
player.fade()
410394
clear_playing()
411395
player.reset_progress()
@@ -459,8 +443,9 @@ def make_drop(event):
459443
else:
460444
print("Wrong file: ", new_file)
461445

462-
if len(tree.get_children()) != len(selections):
463-
tree.selection_set(selections)
446+
#if len(tree.get_children()) != len(selections):
447+
# tree.selection_set(selections)
448+
464449
progressbar.set(start_pos)
465450

466451
files = utils.get_files_from_tree(tree, songs)
@@ -559,6 +544,7 @@ def build_gui():
559544
global audio_device_dropdown
560545

561546
root = CTk()
547+
562548
root.protocol("WM_DELETE_WINDOW", on_closing)
563549
icon = PhotoImage(file="./icons/icon.png")
564550
root.iconphoto(True, icon)
@@ -764,6 +750,13 @@ def update_loudness():
764750
songs[id] = tuple(new_data)
765751
is_converting = False
766752

753+
oimage = None
754+
def draw_wave(temp_filename):
755+
global oimage
756+
global_canvas = global_vars.wave_canvas
757+
oimage = tk.PhotoImage(file=temp_filename)
758+
global_vars.image_id = global_canvas.create_image(0, 0, anchor="nw", image=oimage)
759+
os.remove(temp_filename)
767760

768761
def check_music():
769762
global is_playing
@@ -772,6 +765,10 @@ def check_music():
772765

773766
setup_buttons()
774767

768+
if global_vars.wave_queue.qsize()>0:
769+
file_name = global_vars.wave_queue.get(block=False)
770+
draw_wave(file_name)
771+
775772
def worker():
776773
update_loudness()
777774

player.py

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,8 @@
2020
import matplotlib.pyplot as plt
2121
from PIL import Image
2222

23-
matplotlib.use("Agg")
2423

24+
matplotlib.use("Agg")
2525

2626

2727

@@ -245,11 +245,9 @@ def make_wave(pcm_data, sample_rate):
245245
buf.close()
246246
plt.clf()
247247
plt.close()
248-
oimage = tk.PhotoImage(file=temp_filename)
248+
global_vars.wave_queue.put(temp_filename)
249249

250-
global_vars.image_id = global_canvas.create_image(0, 0, anchor="nw", image=oimage)
251250

252-
os.remove(temp_filename)
253251

254252

255253
def get_loudness_from_file(file):

0 commit comments

Comments
 (0)