1. ホーム
  2. python

[解決済み】TypeError: generatecode() は位置引数を0個取るが、1個が与えられた

2022-02-19 02:25:01

質問

ボタンを押すと(コードを生成する)、ファイルから一行のデータを取り出して、そのデータを

TypeError: generatecode() takes 0 positional arguments but 1 was given.

プレ 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()

解決するには?

クラスのメソッドを呼び出すとき(例えば generatecode() この場合)、Pythonは自動的に self を関数の最初の引数として指定します。そのため self.my_func()を呼び出すようなものである。 MyClass.my_func(self).

つまり、Pythonが「generatecode()は0個の位置引数を取るが、1個が与えられた」と教えてくれるのは、あなたのメソッドが引数を取らないように設定されていることを伝えているのですが self 引数が渡されたままなので、実際には引数を1つ受け取っていることになります。

追加する self をメソッド定義に追加すると、問題が解決されます。

def generatecode(self):
    pass  # Do stuff here

別の方法として、メソッドを static にすることもでき、その場合 Python は ではなく を渡す self を第一引数として指定します。

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