Я всегда получаю сообщение об ошибке типа, в котором говорится, что мне не хватает одного необходимого позиционного аргумента, который является «я», как я могу это исправить?
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()






поместите метод button_click в класс view, некоторые объяснения о себе
class view():
...
def button_click(self):
self.form.destroy()
Chatclient().design()
Проблема здесь:
button = Button(root, text = "Create Group Chat", command= button_click)
Обратите внимание на команду - она требует вызвать button_click и будет без аргументов. Вы определили функцию щелчка как
def button_click(self):
поэтому, когда вы нажимаете кнопку и вызываете button_clickбез аргументов, поскольку ваше определение требует аргумента self - будь то из-за того, что он находится в классе или по какой-либо другой причине, - вы получаете ошибку. Либо избавься от self в аргументах
def button_click():
или если он должен быть частью определения класса, определите Button только с допустимым объектом. Например, вы можете поместить внутрь def __init__(self):
self.button = Button(root, text = "Create Group Chat", command= self.button_click)
с дополнительным бонусом создания вашего графического интерфейса в конструкторе, что является хорошим дизайном.
Вам нужно поместить определение функции для 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++, если вы об этом знаете.
Вы можете узнать больше о себе здесь.
Должен ли
button_clickиметь отступ в классе?