__init __ () отсутствует 2 обязательных позиционных аргумента - PullRequest
0 голосов
/ 03 сентября 2018

Пожалуйста, помогите мне. В этой простой программе tkinter для создания кнопки я предоставил все три аргумента, но на экране появляется ошибка, связанная с позиционными аргументами. Извините за мой плохой английский.

from tkinter import *

class Button:
def __init__(self, row, column, frame):
    self.row = row
    self.column = column
    b = Button(frame).grid(row = self.row, column = self.column)

tk = Tk()
b1 = Button(row = 1, column = 1, frame = tk)
tk.mainloop()

И ошибка:

RESTART: C: \ Users \ vnira \ Documents \ python.projects \ Flappy Bird \ whiteboard.py
Traceback (последний вызов был последним):
Файл "C: \ Users \ vnira \ Documents \ python.projects \ Flappy Bird \ whiteboard.py", строка 11, в
b1 = кнопка (строка = 1, столбец = 1, рамка = tk)
Файл "C: \ Users \ vnira \ Documents \ python.projects \ Flappy Bird \ whiteboard.py", строка 7, в init
Кнопка (рамка) .grid (row = self.row, column = self.column)
Ошибка типа: init () отсутствует 2 обязательных позиционных аргумента: 'column' и 'frame'

Заранее спасибо

Ответы [ 2 ]

0 голосов
/ 03 сентября 2018
from tkinter import *

class Buttons:
    def __init__(self, row, column, frame):
        self.row = row
        self.column = column
        b = Button(frame).grid(row = self.row, column = self.column)

tk = Tk()
b1 = Buttons(row = 1, column = 1, frame = tk)
tk.mainloop()

Вы создали класс Button, когда у tkinter есть класс Button. Использование собственных имен переменных может помочь :) Я представляю, что он пытался рекурсивно создать экземпляр класса Button, который вы создали, вместо создания экземпляра класса Button, который находится внутри модуля tkinter.

0 голосов
/ 03 сентября 2018

В __init__ в классе Button вы пытаетесь работать с новым экземпляром класса Button:

b = Button(frame)

Поскольку button.__init__ принимает 3 аргумента, row, column, frame сценарий завершается ошибкой. Если вы также передадите row и column, вы столкнетесь с проблемами рекурсии, когда вы будете бесконечно создавать новые экземпляры Button.

РЕДАКТИРОВАТЬ: Как указано в комментариях и других ответах, tkinter имеет свой собственный класс Button, который вы перезаписываете, поэтому вам следует избегать выполнения

from tkinter import *

и вместо этого просто import tkinter и позвоните tkinter.Button.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...