Я хотел бы вызвать метод объекта при нажатии кнопки tkinter.Button.
Я сократил свой код до кода ниже.Когда я вызываю функцию (newone) напрямую (как в "newone ('three')"), все кажется нормальным, но когда нажимают кнопку (которая вызывает ту же функцию), я получаю сообщение об ошибке.
Я просмотрел похожие посты на тему «typerror: x ist callable», но я не нашел ничего похожего на мой код, и я понятия не имею, что здесь не так.Фактический вызов lot.addone (name), кажется, работает, так как я получаю ошибку только тогда, когда хочу создать новый объект внутри addone ().Является ли объект class () больше не видимым (из-за вызова через tkinter.button?) И как я могу сделать его снова видимым?Буду признателен за любую помощь.
import tkinter
window = tkinter.Tk()
def newone(name='four'):
global lot
lot.addone(name)
class thing:
def __init__(self):
self.name = 'nothing'
class list_of_things:
def __init__(self):
self.things = dict()
def addone(self, name):
self.things[name] = thing() ## the error location
self.things[name].name = name
lot = list_of_things()
lot.addone('one') ## something dummy
lot.addone('two')
newone('three') ## this works
print(lot.things['one'].name)
print(lot.things['three'].name) ## prints out correctly
row_index = 0
for (key, thing) in lot.things.items():
tkinter.Label(window, text = thing.name).grid(row = row_index)
row_index = row_index + 1
tkinter.Button(window, text = 'New task', command = newone).grid(row = row_index) ## this fails
window.mainloop()
я получаю следующую ошибку:
Exception in Tkinter callback
Traceback (most recent call last):
File "D:\tools\Miniconda3\envs\3dot6kivy\lib\tkinter\__init__.py", line 1702, in __call__
return self.func(*args)
File "test.py", line 8, in newone
lot.addone(name)
File "test.py", line 19, in addone
self.things[name] = thing() ## the error location
TypeError: 'thing' object is not callable