__init __()缺少2个必需的位置参数

时间:2018-09-03 07:43:42

标签: python python-3.x tkinter

请帮帮我。在这个用于创建按钮的简单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()

错误:

  

重新启动:C:\ Users \ vnira \ Documents \ python.projects \ Flappy Bird \ whiteboard.py
  追溯(最近一次通话):
  
中的文件“ C:\ Users \ vnira \ Documents \ python.projects \ Flappy Bird \ whiteboard.py”,第11行      b1 =按钮(行= 1,列= 1,框架= tk)
    init
中的文件“ C:\ Users \ vnira \ Documents \ python.projects \ Flappy Bird \ whiteboard.py”,第7行    Button(frame).grid(row = self.row,column = self.column)
  TypeError: init ()缺少2个必需的位置参数:“ column”和“ frame”

预先感谢

2 个答案:

答案 0 :(得分:3)

ValueCollection<TKey, TValue>

当tkinter具有一个Button类时,您创建了一个Button类。使用您自己的变量名可能会有所帮助:)我想它正在尝试递归地创建您创建的Button类的实例,而不是在tkinter模块内部创建Button类的实例。

答案 1 :(得分:2)

__init__类的Button中,您尝试使用Button类的新实例:

b = Button(frame)

由于button.__init__接受3个参数,因此row, column, frame脚本失败。如果您确实也通过了rowcolumn,则将遇到递归问题,在这些问题中您将无限创建新的Button实例。

编辑:正如评论和其他答案所指出的那样,tkinter有自己的Button类,您正在覆盖它,这就是为什么您应该避免这样做的原因

from tkinter import *

,而只需import tkinter并致电tkinter.Button