Python и Tkinter: классы и ошибка создания экземпляра - PullRequest
0 голосов
/ 18 октября 2018

У меня есть два класса, и я пытаюсь создать кнопку с командой для вызова метода в другом классе.В настоящее время у меня возникают проблемы с созданием экземпляра, потому что я получаю ошибку:

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'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...