Цикл For внутри метода: позиционные аргументы TypeError - PullRequest
0 голосов
/ 10 июня 2018

Я пытаюсь создать простой Gui с tkinter, используя классы.Но я не совсем понимаю, как заставить цикл for работать внутри метода count, кто-нибудь может сказать мне, куда мне добавить отсутствующий аргумент?

from tkinter import *
import time


class App:

    def __init__(self, master):
        self.container1 = Frame(master)
        self.container1.pack()
        self.button1 = Button(self.container1, text="count")
        self.button1.bind("<Button-1>", self.count)
        self.button1.pack()

    def count(self):
        for i in range(100):
            self.button1["text"] = str(i)
            time.sleep(1)


root = Tk()
Myapp = App(root)
root.mainloop()

Ошибка:

Exception in Tkinter callback
Traceback (most recent call last):
  File "/usr/lib/python3.5/tkinter/__init__.py", line 1553, in __call__
    return self.func(*args)
TypeError: count() takes 1 positional argument but 2 were given

1 Ответ

0 голосов
/ 10 июня 2018

Когда вы связываете событие, для функции обратного вызова предоставляется позиционный аргумент event.

Измените свой метод count на этот:

def count(self, event):

Youтакже необходимо избавиться от time.sleep(1), поскольку .sleep() является блокирующим вызовом, что означает, что он заблокирует основной цикл tkinter, что приведет к тому, что ваша программа не отвечает.

...