【发布时间】:2016-03-06 13:58:21
【问题描述】:
我有以下代码:
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 教程编写了所有这些代码。在本教程中,代码运行良好。任何帮助,将不胜感激。提前致谢!
【问题讨论】:
-
您只是在创建自己的
Button类的另一个实例。尝试将其重命名为CustomButton。 -
很多 Tkinter 示例代码使用
from tkinter import *,但您现在已经发现为什么这是一个坏的想法了。 -
@PM2Ring ,每当我像你提到的那样学习一些基础知识时,我的生活就更有意义了:P。非常感谢您的建议!
-
我的荣幸! FWIW,当您执行
from tkinter import *时,您导入了 170 多个名称(在 Python 2 中,我不确定 Python 3 中的确切数字)。这不仅令人讨厌,因为可能与您定义自己的名称发生冲突,而且还有一个更大的问题。想象一下,如果您随后对另一个大模块执行import *会发生什么。新模块中的名称可能会破坏 Tkinter 模块中的名称,这将导致奇怪的错误。希望代码将无法运行,提供有用的错误消息。但它有可能会运行,只是没有按照你的预期运行。 -
@PM2RING 这听起来像是在执行一个秘密组合来创建一个邪恶的人工智能:P。我再也不会使用“import *”了……或者,你不觉得值得一试吗??哦,好吧,没关系,太科幻了:)。