Возникли проблемы с реализацией tkinter Frame в классе (OOP) [AttributeError: тип объекта 'Frame' не имеет атрибута 'tk'] - PullRequest
0 голосов
/ 14 января 2020

Я пытаюсь кодировать игру тральщика в Python. Я создал класс Cell, который по сути является объектом Frame tkinter и объектом Button, помещенным в Frame (чтобы форма кнопки была квадратной).

У меня проблемы с кодированием инициализатора для этого класса. До сих пор я пытался

def __init__(self, i, j):
    self.n = i*w+j
    Frame(root, height=50, width=50)
    Frame.grid(row=i, column=j)
    Frame.grid_propagate(0)  
    Frame.columnconfigure(0, weight=1) 
    Frame.rowconfigure(0, weight=1)  
    Button(Frame, width=50, height=50, command=self.find_numbers())

, где find_numbers определяется позже. Затем я создаю C0, экземпляр Cell. Тем не менее, я получил это сообщение об ошибке:

Traceback (most recent call last):
  File "C:/Users/ssbol/Documents/Python Scripts/Minesweeper.py", line 56, in <module>
    C0 = Cell(0,0)
  File "C:/Users/ssbol/Documents/Python Scripts/Minesweeper.py", line 40, in __init__
    Frame.grid(row=i, column=j)
TypeError: grid_configure() missing 1 required positional argument: 'self'

Я не был уверен, как это исправить, поэтому я просто попытался возиться и изменил Frame на self.frame

def __init__(self, i, j):
    self.n = i*w+j
    self.frame = Frame(root, height=50, width=50)
    self.frame.grid(row=i, column=j)
    self.frame.grid_propagate(0)  
    self.frame.columnconfigure(0, weight=1) 
    self.frame.rowconfigure(0, weight=1)  
    self.button = Button(Frame, width=50, height=50, command=self.find_numbers())

This время, я получил это сообщение об ошибке:

Traceback (most recent call last):
  File "C:/Users/ssbol/Documents/Python Scripts/Minesweeper.py", line 56, in <module>
    C0 = Cell(0,0)
  File "C:/Users/ssbol/Documents/Python Scripts/Minesweeper.py", line 44, in __init__
    self.button = Button(Frame, width=50, height=50, command=self.find_numbers())
  File "C:\Users\ssbol\AppData\Local\Programs\Python\Python36\lib\tkinter\__init__.py", line 2369, in __init__
    Widget.__init__(self, master, 'button', cnf, kw)
  File "C:\Users\ssbol\AppData\Local\Programs\Python\Python36\lib\tkinter\__init__.py", line 2292, in __init__
    BaseWidget._setup(self, master, cnf)
  File "C:\Users\ssbol\AppData\Local\Programs\Python\Python36\lib\tkinter\__init__.py", line 2262, in _setup
    self.tk = master.tk
AttributeError: type object 'Frame' has no attribute 'tk'

Я думаю, что я над головой и не очень понимаю, что влекут за собой эти сообщения об ошибках. Может кто-нибудь объяснить, что это значит и / или предложить решение? Спасибо!

1 Ответ

0 голосов
/ 14 января 2020

Вы должны вызвать функцию __init__ суперкласса.

class MyFrame(tk.Frame):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        <your code here>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...