TypeError: after_cancel () принимает 2 позиционных аргумента, но 3 было дано - PullRequest
0 голосов
/ 19 января 2020

Я делаю метроном, используя Tkinter, и для воспроизведения тикающего звука я использую screen.after(), но когда я пытаюсь остановить l oop, чтобы можно было изменить количество ударов в секунду, я получаю ошибка, TypeError: after_cancel() takes 2 positional arguments but 3 were given, хотя я действительно дал 2 аргумента, а не три. Вот мой код:

from tkinter import *
from time import sleep
import os
import sys
times1 = 0
times2 = 1
def quit_():
    screen.destroy()
    sys.exit()
def run():
    global times1
    global times2
    times1 += 1
    bpm = bpm_.get()
    entry.delete(0, END)
    bpm = int(bpm)
    bpm = bpm/60
    bpm = 1/bpm
    def run_():
        global times1
        global times2
        sleep(bpm)
        os.system("afplay metronome.wav&")
        screen.after(1,run_)
        if times1 > times2:
            screen.after_cancel(1,run_)
            times1 = 0
            times2 = 1
    run_()
def main():
    global bpm_
    global entry
    bpm_ = StringVar()
    Label(screen, text="").pack()
    Label(screen, text = "enter a bpm").pack()
    entry = Entry(screen, textvariable=bpm_)
    entry.pack()
    Label(screen, text="").pack()
    Button(screen, text = "enter", command = run).pack()
    Label(screen, text="").pack()
    Button(screen, text = "quit", command = quit_).pack()
screen = Tk()
main()
screen.mainloop()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...