通过3个参数,但引用说我正在通过4

时间:2018-06-02 01:35:15

标签: python tkinter toplevel

我一直试图在这里找到问题几个小时。从我可以在网上找到的人实际上传递的参数多于他们认为可以找到的与此TypeError相关的所有帖子。出于某种原因,这个问题只会在我创建一个继承自Toplevel的类时发生。

Tackback:

Tkinter回调中的异常

Traceback (most recent call last):
  File "C:\Program Files\Python36\lib\tkinter\__init__.py", line 1699, in __call__
    return self.func(*args)
  File "C:\Users\Makin Bacon\workspace\stuff\MINT-master\test3.py", line 12, in fake_error
    topErrorWindow(self, message, detail)
  File "C:\Users\Makin Bacon\workspace\stuff\MINT-master\test3.py", line 17, in __init__
    tk.Toplevel.__init__(self, master, message, detail)
TypeError: __init__() takes from 1 to 3 positional arguments but 4 were given

我甚至尝试将我的参数发送到一个只打印所有参数的虚函数,它只打印了3个参数。

这是我用来测试的代码,以查看传递的参数。

import tkinter as tk

class MintApp(tk.Tk):

    def __init__(self):
        tk.Tk.__init__(self)
        tk.Button(self, text="test error", command=self.fake_error).pack()

    def fake_error(self):
        message = "test"
        detail = "test detail"
        topErrorWindow(self, message, detail)

def topErrorWindow(*items):
        for item in items:
            print("TEST:  ", item)

if __name__ == "__main__":
    App = MintApp()
    App.mainloop()

结果如下:

TEST:   .
TEST:   test
TEST:   test detail

现在我不确定为什么我得到.参数self,我认为这可能是问题的一部分,但我在网上找不到任何相关问题。

这是我的代码,在我看来应该创建一个带有简单标签的顶级窗口。相反,我得到了上面列出的引用错误。

import tkinter as tk

class MintApp(tk.Tk):

    def __init__(self):
        tk.Tk.__init__(self)
        tk.Button(self, text="test error", command=self.fake_error).pack()

    def fake_error(self):
        message = "test"
        detail = "test detail"
        topErrorWindow(self, message, detail)


class topErrorWindow(tk.Toplevel):
    def __init__(self, master, message, detail):
        tk.Toplevel.__init__(self, master, message, detail)
        tk.Label(self, text = "{}, {}".format(message, detail)).grid(row=0, column=0, sticky="nsew")        

if __name__ == "__main__":
    App = MintApp()
    App.mainloop()

1 个答案:

答案 0 :(得分:2)

执行此操作时:

dependencies {
    // some other stuff        

    // add kapt 
    kapt 'com.google.dagger:dagger-compiler:2.11'
}

您将四个参数传递给tk.Toplevel.__init__(self, master, message, detail) __init__selfmastermessage。但是,由于错误明确指出,detail需要一到三个参数。

我不知道您希望tkinter Toplevel.__init__类与Toplevelmessage做什么,但它们不会映射到{{1}的任何参数}}

解决方案是不将无用的参数传递给超类构造函数,因为它们对您的子类有意义,但对超类没有意义:

detail