Ошибка типа: button_click () отсутствует 1 обязательный позиционный аргумент: 'self'

1

Я всегда продолжаю получать ошибку типа, говоря, что мне не хватает 1 обязательного позиционного аргумента, который является "я", как я могу это исправить?

from tkinter import *
import tkinter
from client import*

root = tkinter.Tk()
class view():    
    root.geometry("250x300")
    F1 =Frame()
    L = Listbox(F1)
    L.grid(row=0, column =0) 

    L.pack()

    F = open("users.txt","r")
    M = F.read()
    cont = M.split()

    for each in cont:
        ind = each.find("#") + 1
        L.insert(ind+1 ,each[ind:])
        break

    F.close()

    F1.pack()

    # strng_ind = -1
def button_click(self):
        self.form.destroy()
        Chatclient().design()

button = Button(root, text="Create Group Chat", command= button_click)

button.pack()
root.mainloop()
Теги:
python-3.x
tkinter
arguments
typeerror

3 ответа

1

поставил button_click метод внутри класса view, некоторые экспликации о себе

class view():

    ...

    def button_click(self):
        self.form.destroy()
        Chatclient().design()
1

Проблема здесь:

button = Button(root, text="Create Group Chat", command= button_click)

Обратите внимание на команду - она говорит, чтобы вызвать button_click и без аргументов. Вы определили функцию щелчка как

def button_click(self):

поэтому, когда вы нажимаете кнопку и вызываете button_click без аргументов, так как для вашего определения требуется собственный аргумент - независимо от того, есть ли он в классе или по какой-либо причине - вы получаете ошибку. Либо избавиться от self в аргументах

def button_click():

или если он должен быть частью определения класса, определите только Button с допустимым объектом. Например, вы можете ввести внутри def __init__(self):

self.button = Button(root, text="Create Group Chat", command= self.button_click)

с добавленным бонусом построения вашего GUI в конструкторе, который является хорошим дизайном.

0

Вы должны поместить определение функции для button_click() внутри класса.

from tkinter import *
import tkinter
from client import*

root = tkinter.Tk()
class view():    
    root.geometry("250x300")
    F1 =Frame()
    L = Listbox(F1)
    L.grid(row=0, column =0) 

    L.pack()

    F = open("users.txt","r")
    M = F.read()
    cont = M.split()

    for each in cont:
        ind = each.find("#") + 1
        L.insert(ind+1 ,each[ind:])
        break

    F.close()

    F1.pack()

    # strng_ind = -1
    def button_click(self):
        self.form.destroy()
        Chatclient().design()

button = Button(root, text="Create Group Chat", command= button_click)

button.pack()
root.mainloop()

В принципе, вам нужно отложить код для определения функции.

Фактически, когда вы помещаете код для функции внутри класса, тогда он становится функцией-членом для этого класса и, передавая аргумент self, вы просто используете ссылку на объект (экземпляр класса), для которого вызывается эта функция. Как this в C++, если вы знаете об этом.

Вы можете прочитать больше о себе здесь.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню