TypeError: done() 接受 1 个位置参数,但给出了 2 个
Posted
技术标签:
【中文标题】TypeError: done() 接受 1 个位置参数,但给出了 2 个【英文标题】:TypeError: done() takes 1 positional argument but 2 were given 【发布时间】:2019-07-07 12:56:24 【问题描述】:在我的以下程序中,我基本上想创建一个编辑字段,双击它后,它会转换为带有我在编辑字段中编写的文本的标签。这是我的代码:
GUI.py:
from tkinter import *
import sys
import Classes
root = Tk()
root.wm_title("Schelling-Cup Alpha 1.0")
root.config(background = "#FFFFFF")
#VARIABLEN LADEN
playerlist = []
#BILDER WERDEN GELADEN
hintergrund = PhotoImage(file = "C:\\Users\\Jakub Pietraszko\\Desktop\\MarioKartProject\\Hintergrund2.png")
fotobutton1 = PhotoImage(file = "C:\\Users\\Jakub Pietraszko\\Desktop\\MarioKartProject\\Button_8Spieler_.png")
fotobutton2 = PhotoImage(file = "C:\\Users\\Jakub Pietraszko\\Desktop\\MarioKartProject\\Button_16Spieler_.png")
#FIRSTFRAME EDITED
firstFrame = Frame(root, width=400, height = 400)
firstFrame.grid(row = 0, column = 0, padx = 3, pady = 3)
x = Label(firstFrame, image = hintergrund)
x.grid(row = 0, column = 0)
def callback1():
"""Die Funktion für 8 Spieler, welche dann den entsprechenden Frame lädt."""
Classes.EditToLabel(400, 400, firstFrame)
pass
def callback2():
"""Die Funktion für 16 Spieler, welche dann den entsprechenden Frame lädt."""
pass
B1 = Button(firstFrame, text = "Button1", bg = "#FFFFFF", width = 700, command = callback1)
B1.config(image = fotobutton1)
B1.place(x = 290, y = 250)
B2 = Button(firstFrame, text = "Button2", bg ="#FFFFFF", width = 700, command = callback2)
B2.config(image = fotobutton2)
B2.place(x = 290, y = 450)
#SECOUNDFRAME EDITED
secoundFrame = Frame(root, width = 400, height = 400)
root.mainloop() #GUI wird upgedated. Danach keine Elemente setzen
这是我的第二个文件 Classes.py:
from tkinter import *
import sys
x = 100
y = 100
class EditToLabel():
def __init__(self, x_Koordinate, y_Koordinate, whichFrame):
self.x_Koordinate = x_Koordinate
self.y_Koordinate = y_Koordinate
self.whichFrame = whichFrame
global neuesEntry
neuesEntry = Entry(whichFrame, width = 40)
neuesEntry.place(x = x_Koordinate, y = y_Koordinate)
neuesEntry.bind('<Double-Button-1>', self.done)
def done(self):
Eintrag = neuesEntry.get()
neuesEntry.destroy()
neuesLabel = Label(self.whichFrame, text = Eintrag, x = self.x_Koordinate, y = self.y_Koordinate)
现在的问题是,我得到了错误并且不知道该怎么做。我现在收到以下错误消息:
Tkinter 回调 Traceback 中的异常(最近一次调用最后一次): 文件“C:...\Programs\Python\Python37\lib\tkinter__init__.py”,行 1705,在通话中 return self.func(*args)
有谁知道我做错了什么,可以给我一个例子,如何让它变得更好和改进?
【问题讨论】:
self.done
,绑定方法,不接受任何参数。回调预计需要一个。
是否需要接受参数?我的意思是我没有任何东西可以交给menthod。 “回调”是什么意思?
EXACT 与 attribute-error-with-event-object-and-classes 重复
self.done()
将被调用 2 个参数,实例引用和事件对象,因为它被用作 bind()
的回调函数。
【参考方案1】:
在 Tkinter 中绑定方法时,即使您不使用它,应用也会将有关事件的信息作为参数发送给函数。
试试:
def done(self, event = None):
...
当您需要使用self.done()
时,将“事件”设置为默认参数会有所帮助
通过.bind()
以外的其他方法。
【讨论】:
这很好用,也谢谢你的解释。我真的很喜欢它!以上是关于TypeError: done() 接受 1 个位置参数,但给出了 2 个的主要内容,如果未能解决你的问题,请参考以下文章
TypeError: __init__() 接受 1 个位置参数,但给出了 2 个
TypeError: login() 接受 1 个位置参数,但给出了 2 个
TypeError: fit() 接受 1 个位置参数,但给出了 3 个
PyTorch - TypeError: forward() 接受 1 个位置参数,但给出了 2 个