__init __()中的TypeError,意外参数python

时间:2016-03-06 13:58:22

标签: python class tkinter init

我有以下代码:

from tkinter import *

class Button:   
    def __init__(self, master):
        frame = Frame( master )
        frame.pack()

        self.printButton = Button(frame, text = "Print Message", command=self.printMessage)
        self.printButton.pack(side = LEFT)

        self.quitButton = Button(frame, text = "Quit", command = frame.quit)
        self.quitButton.pack(side = LEFT)

    def printMessage(self):
        print(" WORKING!! " )       



root = Tk()
b = Button(root)
root.mainloop()

无论如何这似乎都没有错......但是当我运行它时,终端说:

Traceback (most recent call last):
File "class.py", line 23, in <module>
b = Button(root)
File "class.py", line 10, in __init__
self.printButton = Button(frame, text = "Print Message", command=self.printMessage)
TypeError: __init__() got an unexpected keyword argument 'command'

我根据tkinter教程编写了所有这些代码。在本教程中,代码运行良好。任何帮助,将不胜感激。提前谢谢!

1 个答案:

答案 0 :(得分:4)

Tkinter已经有一个Button类,当你创建类时,你现在已经覆盖了名为Button的tkinter类。所以,当你尝试创建一个像这样的tkinter按钮时:

self.printButton = Button(frame, text = "Print Message", command=self.printMessage)

您现在正在引用您的按钮,因为您先前已覆盖了tkinter按钮。而且由于你的按钮只接受一个参数而你给它三个,它会给你一个错误。解决此问题的方法是将导入行更改为:

import tkinter as tk

然后使用tk.*引用任何tkinter函数。例如:

root = Tk()

会变成:

root = tk.Tk()

然后Button引用您的按钮,而tk.Button引用tkinter按钮。这样你就可以很容易地在两者之间进行击打。但是,您也可以调用类似myButton的按钮来解决问题。