import customtkinter as ctk
app = ctk.CTk()
canvas = ctk.CTkCanvas(app, bg="gray", highlightthickness=0)
canvas.pack(fill='both', expand=True, padx=10, pady=10)
main_frame = ctk.CTkFrame(canvas, bg_color='white')
canvas.create_window((20, 20), window=main_frame, anchor='nw')
scrollbar = ctk.CTkScrollbar(app, command=canvas.yview)
canvas.configure(yscrollcommand=scrollbar.set)
scrollbar.place(relx=1, rely=0, relheight=1, anchor='ne')
for i in range(20):
ctk.CTkButton(main_frame, text='Click Me').pack(pady=10)
canvas.update_idletasks()
canvas.configure(scrollregion=canvas.bbox("all"))
app.mainloop()
# вот основной поток в котором происходит обработка
def sounndcloud_downdload (url, user_id):
#тут происходит проверка существования ссылки, если он есть - то идём дальше, если нет - то ошибка
sc_api = SoundcloudAPI(client_id='0BkysEEs4PncmjybpuEn3MHCx8nEnDUc')
track = sc_api.resolve(url)
# в этом моменте мне нужно запустить индикатор
sent_message = bot.send_message(user_id, 'Идёт конвертация . ') #вот отправка сообщения
status = True
thread_indicator = threading.Thread(target=indicator_edit, args=(sent_message.message_id, user_id, status))
thread_indicator.start()
# тут начинается сама обработка
assert type(track) is Track
filename = f'./{track.artist} - {track.title}.mp3'
with open(filename, 'wb+') as fp:
track.write_mp3_to(fp)
# это последняя часть, отправка файла
send_audio(filename, user_id)
<i># thread.kill() здесь мне нужно остановить мой индикатор</i>
# вот сам индикатор. Тут идёт изменение сообщения.
# Я не знаю как мне остановить этот цикл while в тот момент, когда обработка основной функцией # завершиться.
def indicator_edit (message_id, user_id, status, stop_event):
while status:
for i in range(1, 4):
text = f'Идёт конвертация ' + '. ' * i
bot.edit_message_text(chat_id=user_id, message_id=message_id, text=text)
#url = (сокращённая ссылка)
r = requests.head(url, allow_redirects=True)
print(r.url) # output: изначальная ссылка
Я же хочу, чтобы моё приложение выглядело вот так:
И как я уже говорил ранее, я нашёл всего два способа это реализовать, но по вышесказанным причинам они мне не подходят.
Если вы знаете решение, буду благодарен за подсказку. Потому что я, честно говоря, уже склоняюсь к тому, что делать программу с графическим интерфейсом придётся не на Python.