как очистить текст из текстового виджета из метода класса? - PullRequest
0 голосов
/ 02 августа 2020

Я новичок в ООП. Я написал следующий код, в котором метод delText очищает текстовое поле при нажатии на текстовый виджет. Я вызвал метод delText, привязав его к <FocusIn>, но получаю сообщение об ошибке

AttributeError: 'GuiAndFileMethods' object has no attribute 'delete'

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

мой код

from tkinter import *  
class GuiAndFileMethods(Frame):
    def delText(obj,event=None):
       obj.delete("1.0", END)   
z = GuiAndFileMethods()
root = Tk()
fileName = Text(root, height = 1, width = 57, wrap = None )
fileName.insert(INSERT, "Filename")
fileName.grid(row = 1, column = 0,columnspan = 5, padx = (10,50),sticky = W)
fileName.bind("<FocusIn>", lambda x: z.delText(fileName))

replacementNum = Text(root, height = 1, width = 18, wrap = None )
replacementNum.insert(INSERT, "No Of Replacements")
replacementNum.grid(row = 1, column = 6,columnspan = 1,sticky = E)
replacementNum.bind("<FocusIn>", lambda x: z.delText(replacementNum))
root.mainloop()

Ответы [ 2 ]

0 голосов
/ 02 августа 2020

Когда вы определяете такой метод, Python автоматически вставляет экземпляр класса в качестве первого аргумента. По соглашению это называется self, но это не обязательно. Итак, obj на самом деле существует экземпляр класса GuiAndFileMethods, а НЕ объект, который вы передали. Переданный вами объект будет вторым аргументом:

def delText(instanceof_GuiAndFileMethods, obj, event=None):
    obj.delete("1.0", END)

Итак, как вы его определяете и как вы это называете, немного иначе. Вы бы назвали его так:

instanceof_GuiAndFileMethods.delText(obj, event)

Этот объект, для которого вы вызываете метод, вставляется в качестве первого аргумента (опять же, обычно self).

0 голосов
/ 02 августа 2020

Вы должны либо определить свою функцию как stati c function:

class GuiAndFileMethods(Frame):
    @staticmethod
    def delText(obj,event=None):
       obj.delete("1.0", END)  

или передать self в качестве первого аргумента функции:

class GuiAndFileMethods(Frame):
    def delText(self, obj,event=None):
       obj.delete("1.0", END)  

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

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