У меня есть два класса, и я пытаюсь создать кнопку с командой для вызова метода в другом классе.В настоящее время у меня возникают проблемы с созданием экземпляра, потому что я получаю ошибку:
AttributeError: 'Queue' object has no attribute 'number_queue'
, которая является переменной, на которую ссылаются виджеты и метод Widgets.
Любые указатели приветствуются, я всегда борюсь с экземплярами и ссылками между классами.Одна из моих основных проблем заключается в том, что если я создал экземпляр, например:
instance1 = Widgets(self,master,queue_type, symbol, examples)
Что я должен поместить в переменные экземпляра?И что мне нужно поместить в класс Queue.
Это класс с кнопкой, ссылающейся на виджеты
class Queue(tk.Frame):
"""A Tkinter grid"""
def __init__(self, master, columns, *args, **kwargs):
"""
Construct a new grid
Parameters:
master (tk.Tk|tk.Frame): Frame containing this widget
columns (int): Amount of columns in the grid
"""
super().__init__(master, *args, **kwargs)
self._row = 0
#self._callback = Widgets.remove_student_tick
##self.awidget = Widgets()
# configure the grid to fill the space
for column in range(columns):
tk.Grid.columnconfigure(self, column, weight=1)
def add_student_row(self, first_last, number,questions_asked):
column1= number
column2 = first_last
column3 = questions_asked
column4 = ''
column5 = ''
values= [column1, column2, column3, column4, column5]
for column, value in enumerate(values):
label = tk.Label(self, text=value)
label.grid(row=self._row, column=column, sticky=tk.W, ipadx = 10)
self._row += 1
cross = Button(self, bg='red', command =Widgets.remove_student_tick(self, first_last)
cross.grid(column = 5)
И это тот класс и метод, на который я ссылаюсь.
class Widgets(tk.Frame):
def __init__(self,master,queue_type, symbol, examples, **kwargs):
super().__init__(master, **kwargs)
***some irrelavant code****
def remove_student_tick(self, first_last):
***some irrelavant code***
Любая помощь приветствуется.
Редактировать: Отслеживание:
Traceback (most recent call last):
File "C:\Users\AlexLaptop\AppData\Local\Programs\Python\Python36\lib\tkinter\__init__.py", line 1702, in __call__
return self.func(*args)
File "C:\Users\AlexLaptop\Desktop\CSSE A3\GUI.py", line 77, in callback
self._grid.add_student_row(first_last,number, self._q_student_queue[first_last])
File "C:\Users\AlexLaptop\Desktop\CSSE A3\GUI.py", line 209, in add_student_row
cross = Button(self, bg='red', command = Widgets.remove_student_tick(self, first_last))
File "C:\Users\AlexLaptop\Desktop\CSSE A3\GUI.py", line 86, in remove_student_tick
index = self.number_queue.index(first_last)
AttributeError: 'Queue' object has no attribute 'number_queue'
{'asd': 0, 'aasd': 0}
Exception in Tkinter callback
Traceback (most recent call last):
File "C:\Users\AlexLaptop\AppData\Local\Programs\Python\Python36\lib\tkinter\__init__.py", line 1702, in __call__
return self.func(*args)
File "C:\Users\AlexLaptop\Desktop\CSSE A3\GUI.py", line 77, in callback
number = self.number_queue.index(first_last) + 1
File "C:\Users\AlexLaptop\Desktop\CSSE A3\GUI.py", line 209, in add_student_row
File "C:\Users\AlexLaptop\Desktop\CSSE A3\GUI.py", line 86, in remove_student_tick
def remove_student_tick(self, first_last):
AttributeError: 'Queue' object has no attribute 'number_queue'
С виджетами вместо фрейма:
File "C:\Users\AlexLaptop\Desktop\CSSE A3\GUI.py", line 227, in main
app = App(root)
File "C:\Users\AlexLaptop\Desktop\CSSE A3\GUI.py", line 126, in __init__
quick_frame = Widgets(quickFrame, "Quick", "<", quick_examples)
File "C:\Users\AlexLaptop\Desktop\CSSE A3\GUI.py", line 48, in __init__
self._grid = Queue(self, 4)
File "C:\Users\AlexLaptop\Desktop\CSSE A3\GUI.py", line 172, in __init__
super().__init__(master, *args, **kwargs)
TypeError: __init__() missing 3 required positional arguments: 'queue_type', 'symbol', and 'examples'