Как сделать всплывающее окно tkinter с кнопками, которые будут ждать нажатия пользователем? - PullRequest
0 голосов
/ 02 марта 2020

Я делаю программу, которая будет сортировать и переименовывать файлы. Если файл .jpg, я хочу спросить, принадлежит ли он к «A» или «B». Моя проблема в том, что, когда в files больше одного каталога, программа создаст для каждого choose = Toplevel() в один и тот же момент (не в тот же момент, но сделает один, тогда l oop в for file in files: и создаст другой один и так далее, не дожидаясь кнопки). Тогда выбор A или B повлияет только на последний l oop в for file in files:. Можно ли остановить программу и цикл, пока пользователь не решит нажать A или B?

Вот фрагмент кода, о котором я говорю:

for file in files:
cwd = os.getcwd()
shutil.copy(file, cwd)
dir_file = cwd + '/' + os.path.basename(file)
file_name, file_ext = os.path.splitext(os.path.basename(file))
if file_ext.upper() in [".JPG", ".JPEG", ".PDF", ".TIF"]:

    def send_a(a):
        adress = dir_file
        name = "photo_A0" + str(a) + file_ext
        name = cwd + "/" + name
        os.rename(adress, name)
        a += 1
        return a

    def send_b(b):
        adress = dir_file
        name = "photo_B0" + str(b) + file_ext
        name = cwd + "/" + name
        os.rename(adress, name)
        b += 1
        return b


    choose = Toplevel()
    choose_one = Label(choose, text="Choose one: " + os.path.basename(file), width=50)
    choose_one.grid(row=0, column=0)

    guzik3 = Button(choose, text="A", command=lambda: [send_a(a), choose.destroy()])
    guzik3.grid(row=0, column=3, padx=10, pady=6)
    guzik4 = Button(choose, text="B", command=lambda: [send_b(b), choose.destroy()])
    guzik4.grid(row=0, column=3, padx=10, pady=6)
else ...
...