【问题标题】:TypeError: generatecode() takes 0 positional arguments but 1 was givenTypeError: generatecode() 接受 0 个位置参数,但给出了 1 个
【发布时间】:2017-10-05 23:27:21
【问题描述】:

试图创建一个程序,当您点击按钮(生成代码)时,它会从文件中提取一行数据并输出到

TypeError: generatecode() 接受 0 个位置参数,但给出了 1 个

from tkinter import *



class Window(Frame): 
   def __init__(self, master = None):
       Frame.__init__(self, master)

       self.master = master

       self.init_window()


def init_window(self):

    self.master.title("COD:WWII Codes")

    self.pack(fill=BOTH, expand=1)

    codeButton = Button(self, text = "Generate Code", command = self.generatecode)

    codeButton.place(x=0, y=0)

def generatecode(self):
    f = open("C:/Programs/codes.txt", "r")

    t.insert(1.0. f.red())


root = Tk()
root.geometry("400x300")

app = Window(root)

root.mainloop()

【问题讨论】:

标签: python tkinter


【解决方案1】:

当您调用类的方法时(例如本例中的generatecode()),Python 会自动将self 作为第一个参数传递给函数。所以当你打电话给self.my_func()时,更像是打电话给MyClass.my_func(self)

因此,当 Python 告诉您“generatecode() 接受 0 个位置参数但给出了 1 个”时,它是在告诉您您的方法设置为不接受任何参数,但是当方法是调用,所以实际上它正在接收一个参数。

self 添加到您的方法定义中应该可以解决问题。

def generatecode(self):
    pass  # Do stuff here

或者,您可以将方法设为静态,在这种情况下,Python 不会self 作为第一个参数传递:

@staticmethod
def generatecode():
    pass  # Do stuff here

【讨论】:

  • 非常感谢。这行得通,现在当我点击生成代码时,它说 t.insert 未定义?我发布了新代码。
  • 对。没有在任何地方定义变量 t (另外,read 在该行拼写错误,看起来你有一个点而不是逗号,所以这些也会导致问题)。
  • 无论如何,当这个问题得到解决时,最好打开一个新问题。并将您的原始问题改回以显示导致错误的原始代码。否则,阅读此问题的人会感到困惑(因为您现在拥有的代码不会产生错误。
  • 挣扎了几个小时后,我找到了你:}
  • 我也尝试了 100 种其他方法。感谢您和 stackoverflow,我现在可以平静地完成我的代码
猜你喜欢
  • 2020-06-13
  • 2013-09-23
  • 2016-01-30
  • 2019-06-26
  • 2014-11-12
  • 1970-01-01
  • 2019-04-15
  • 1970-01-01
相关资源
最近更新 更多