TypeError: done () принимает 1 позиционный аргумент, но 2 - PullRequest
0 голосов
/ 13 февраля 2019

В моей следующей программе я в основном хочу создать поле редактирования, которое после двойного щелчка по нему преобразуется в метку с текстом, который я написал в поле редактирования.Вот мой код:

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 (последний вызов был последним):
Файл "C: ... \ Programs \ Python \ Python37 \ lib \ tkinter__init __. Py", строка 1705, в вызов возвращение self.func (* args) TypeError: done () принимает 1 позиционный аргумент, но было дано 2

Кто-нибудь знает, что я делаю неправильнои не могли бы вы дать мне пример, как сделать его лучше и улучшить?

1 Ответ

0 голосов
/ 13 февраля 2019

При связывании метода в Tkinter приложение отправляет информацию о событии как аргумент и функцию в функцию, даже если вы ее не используете.

Try:

def done(self, event = None):
    ...

Setting "событие"как параметр по умолчанию помогает, когда вам нужно использовать self.done() через другие методы, кроме .bind().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...